EF--实质上使用ADO.NET

 

1,              NHibernate:Hibernate在.NET平台下的版本

2,              iBatis.NET:iBatis在.NET平台的实现

3,              Linq to SQL(微软不再更新):.NET针对SQL server的ORM框架

4,              ADO.NET  Entity  Framework:微软在.NET4.0推出的领域驱动开发模型。

注意:ADO.NET  Entity  Framework是微软以ADO.NET为基础所发展出来的对象关系映射解决方案,只不过是对ADO.NET进行了一个更高层次的封装。

.NET应用程序访问数据库的方式

1.手写代码通过ADO.NET类库

2,DataSet结合DataAdapter结合

3,ORM

ORM解决方案:

    Linq to sql

   EF:数据库的ER模型可以完全转换成对象模型

EF体系结构

1, Data Providers:数据库的相关操作

2, EDM:概念层和逻辑层的映射,应用程序构建在该层之上

3, 其他层:如何操作EDM

接下来,我们来看下EDM的概念

EDM(Entity  Data   Model):实体数据模型

能将我们对数据对象的操作为对数据库的操作。

EF中,我们对数据对象的操作,实际上是在操作EDM,

EDM会将对数据对象的操作发送到数据库。

EDM三层:

CSDL(概念层)

定义对象模型,以面向对象的方式访问数据,可以简单理解为实体类

MSL(对应层)

负责上层的概念层结构与下层的存储结构之间的映射

SSDL(存储层)

负责与数据库管理系统中的数据表做实体对应

EF图解:

当我们通过应用程序对数据库执行CRUD时,通过EF方式,实际上是对ObjectContext的操作,ObjectContext相当于EF的入口,ObjectContext拿到对应的消息(CRUD)后,通过ORM中的Mapping来将对象O映射成数据库中的关系R。我们通过一个截图来看下Mapping中存储的内容。

 

然后我们就来通过CodeFirst的方式实现对数据库的增删改查操作。

 

 

 

SqlServerConnection--基于ado.net

https://github.com/dotnet/efcore/blob/main/src/EFCore.SqlServer/Storage/Internal/SqlServerConnection.cs

using System.Collections.Concurrent;

using Microsoft.Data.SqlClient;

 

 

 

 

EFCORE 生成sql

https://github.com/dotnet/efcore/blob/main/src/EFCore.SqlServer/Query/Internal/SqlServerQuerySqlGenerator.cs

 

 

 

 

 

 

SqlServerDatabaseCreator--Command

https://github.com/dotnet/efcore/blob/a778126bfcd74594ad3fee585c92029f6d002b17/src/EFCore.SqlServer/Storage/Internal/SqlServerDatabaseCreator.cs

 

 

 

 

 

 

 

 

 

RelationalDatabaseCreatorDependencies

 

https://github.com/dotnet/efcore/blob/197479e871148acfc882cd166e8ac28a089a30c9/src/EFCore.Relational/Storage/RelationalDatabaseCreatorDependencies.cs

 

 

 

 

Mysql--写法与EF内置的sqlserver完全相同

结构与EFCORE中内含的sqlserver完全相同。

https://github.com/mysql/mysql-connector-net/blob/8.0/EFCore/src/Storage/Internal/MySQLServerConnection.cs

 

 

 

 

MySQLServerConnection

 

MySQLDatabaseCreator--Command

https://github.com/mysql/mysql-connector-net/blob/8.0/EFCore/src/Storage/Internal/MySQLDatabaseCreator.cs