linq to sql和ef

1、Linq to ef执行过程如下:

 

 

2、以sql server说明linq to sql 和linq to ef差别

Linq to sql 执行用的provider是System.Data.SqlClient,与数据库直接绑定,执行过程为linq

To sql直接翻译成sql,再通过System.Data.SqlClient执行sql语句。

Linq to ef 执行用的provider是System.Data.EntityClient,即上图紫红色图示,执行过程为linq to entities query 到entity sql(esql),再通过System.Data.EntityClient将esql变为sql,然后System.Data.SqlClient执行sql语句。也就是通过EntityClient进行解耦。

 

3、两个provider异同与联系:

ADO.NET Data Provider是ADO.NET的基础Provider,ADO.NET EF Provider是依赖于ADO.NET Data Provider的,比如SQL Server的ADO.NET EF Provider是System.Data.EntityClient,是依赖System.Data.SqlClient的

 

4、postgresql目前所流行的ADO.NET EF Provider

开源的有NpgSql,支持ef和ado方式,不支持ado.net实体数据模型的数据库优先。用起来需要用code first 方式。

商业应用的有Devert的linqconnect,Devert最高版本对linq to sql 和ef都支持。找到的破解版貌似只支持linq to sql。

 

5不同EntityClient解释出的sql语句示例,以System.Data.EntityClient和NpgSql为例,括号为所用ef驱动到的数据库:

System.Data.EntityClient(sql server)如下:

{SELECT

[Extent1].[Id] AS [Id],

[Extent1].[Cid] AS [Cid],

[Extent1].[Name] AS [Name],

[Extent1].[StartTime] AS [StartTime],

[Extent1].[EndTime] AS [EndTime],

[Extent1].[Status] AS [Status]

FROM [dbo].[Sys_Banci] AS [Extent1]}

NpgSql(postgresql)如下:

{SELECT "Extent1"."Id" AS "Id","Extent1"."Cid" AS "Cid","Extent1"."Name" AS "Name","Extent1"."StartTime" AS "StartTime","Extent1"."EndTime" AS "EndTime","Extent1"."Status" AS "Status"

FROM "dbo"."Sys_Banci" AS "Extent1"}

posted @ 2014-05-14 15:52  lesliefan  阅读(1079)  评论(0)    收藏  举报