头像

【LINQ和EF区别】LINQ to SQL和Entity Framework对比与关联

首先,在了解 LINQ To SQL 有什么优点之前,我们有必要首先了解下,微软为什么弄了这么个东西。 搞出这个东西来有什么目的:——当然是为了 满足不知道怎么操作数据的程序员开发设计的,并不是每个程序员 都会直接操作数据库,LinQ 可以让他们以一种面向数据对象的方式来思考,及持久化他们的数据!

好处:   容易学习,书写简单。 在开发 中小型 项目 的时候推荐使用!因为可以节省时间!
          它可以很方便的调用 存储过程、SQL函数

缺点:由于直接封装了所有的数据持久操作。导致批量持久数据会产生效率问题
      尤其体现在批量跟新数据,它会在内存中保持大量的数据模型。

总结:中小型 项目 就放心用吧!  不过从技术 储备的角度来说,建议 看看entity framework

原文:http://blog.163.com/kunkun0921@126/blog/static/169204332201401605839384/

LINQ to SQL和Entity Framework对比与关联  

LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术。他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦。使用EF,我们查询的对象不再是完全对应数据库架构的C#类,而是更高层的抽象:Entity Data Model。这为我们提供了额外的灵活性,但是在性能和简单性上面也会有所损失。

LINQ to SQL由C#团队开发并在.NET Framework 3.5中发布,而Entity Framework由ADO.NET团队开发并作为.NET Framework 3.5 Service Pack 1的一部分发布。此后,LINQ to SQL由ADO.NET团队接手,其结果是:在.NET 4.0中,ADO.NET团队更加专注于EF的改进,相对来说,LINQ to SQL的改进要小得多。

LINQ to SQL和Entity Framework各有所长,LINQ to SQL是一个轻量级的ORM框架,旨在为Microsoft SQL Server数据库提供快速的应用程序开发,其优点是易于使用、简单、高性能。而Entity Framework的优点在于:其为创建数据库架构和实体类之间的映射提供了更好的灵活性,它还通过提供程序支持除了SQL Server之外的第三方数据库。

EF 4.0一个非常受欢迎的改进是它现在支持与LINQ to SQL几乎同样的查询功能。这意味着我们在系列文章中的LINQ-to-db查询可以同时适用于EF 4.0和L2S。而且,这也使得L2S成为我们学习使用LINQ查询数据库的理想技术,因为其保持了对象关系方面的简单性,并且我们学习到的查询原则和技术同样适用于EF。

说明:.NET 3.5下建议使用LINQ,该版本已经完全支持成熟的LINQ;使用EF则建议使用.NET 4.0(VS2010)以上的版本,该版本有成熟完整的EF

LINQ to SQL Entity Framework
复杂度 相对不复杂 相对比较复杂
模型 域模型(Domain model) 概念数据模型(Conceptual data model)
数据库服务器 SQL Server 多种数据库产品
开发时间 快速应用开发 需要较长时间,但支持更多特性
继承 困难 容易
文件类型 DBML文件 EDMX,CDSL,MSL,SSDL文件
复杂类型支持 不支持 支持
查询能力 通过DataContext ESQL,对象服务, Entity Client
性能 第一次查询较慢 第一次查询也较慢,但总体优与LINQ to SQL
完善 不再出新版本 还出新版本
从模型生成数据库 支持 不支持

复杂度:支持越多的特性就会越复杂。LINQ to SQL所支持的特性比较少,所以也就相对不太复杂;而EntityFramework支持的特性比较多,所以相对比较复杂。

模型:LINQ to SQL在数据表与类之间提供了一对一的映射。如果你有Customers,Orders, 和Lineitems表,你就会有Customer,Order, 和Lineitem类来匹配每一个表。EntityFramework可以使你有一个Customer类,而这个类可以匹配多个表。这就意味着公司名可以 在一个表中,但是地址是在另一个表中,而电话号码又在另一个表中,等等。

数据库服务器:LINQ to SQL只支持Microsoft SQL Server 2000及之后的版本,但即使是SQLServer2000也有很多限制。EntityFramework可以支持IBMDB2, Sybase SqlAnywhere, Oracle, SQLAzure,还有其他很多。

开发时间:LINQ to SQL很容易学,开发起来也很快,但是LINQ to SQL有一些限制,在开发较复杂的应用时可能会产生问题。EntityFramework的能力更强,虽然学习及应用起来比较慢,但是对更多的特性的支持使得在开发较复杂的应用时可以使问题最小化。

继承:LINQ to SQL支持TPH,而EntityFramework支持TPH和TPT,并且对TPC也部分支持。

文件类型:LINQ to SQL使用包含XML的数据库标记语言(DBML)文件来映射entity与数据表。EntityFramework 使用四个文件。第一个是Entity Data Model (EDMX),这个是在设计器中使用的。在编译时EDMX文件产生了其他三个文件。另外三个文件中,第一个是ConceptualSchema Definition Language(CSDL)文件,其包含概念模型的XML定义。第二个是SchemaDefinition Language(SSDL)文件,其包含存储模型的定义。第三个文件是Mapping Specification Language(MSL)文件,其包含概念模型与存储模型之间的映射。

复杂类型支持:比如说,一个客户有电话号码,但你想要电话号码定义为国家区号,地区号,城市区号,号码和分机号。LINQto SQL不支持这种复杂类型,而EntityFramework支持。

查询能力:LINQ to SQL通过DataContext对数据库进行查询。EntityFramework通过ObjectContext通过LINQto Entities进行查询。Entity Framework还提供了ESQL,它是一种类似SQL的查询语言,很适合在模型定义中定义查询。EntityFramework还包含了 ObjectQuery类,用于对象服务在运行时动态创建查询。最后EntityFramework还包含EntityClientProvider,它 用于对概念模型进行查询。

性能:LINQ to SQL和Entity Framework第一次执行查询的时候都比较慢,但之后性能都让人比较满意。EntityFramework性能要稍微优于LINQto SQL。

完善:微软在发布了Entity Framework之后就停止了发布新的LINQ to SQL,但由于LINQto SQL的简单性,它还是很受欢迎的,所以微软仍将继续对LINQto SQL的用户进行支持与反馈,但是LINQto SQL将不再发布新版本进行完善。

由模型生成数据库:LINQ to SQL没有能力由模型生成数据库。Entity Framework支持两种类型的开发模式,数据库优先和编码优先。数据库优先开发,数据库已经存在,所以不需要由模型生成数据库。编码优先,你要先创建你的模型,然后由模型生成数据库。

头像

Senparc.Weixin.TenPay 退款 未能创建 SSL/TLS 安全通道。

目前本机vs调试,可以退款成功!

但放在iis站店里会报错。

这是个坑爹的报错,但是证明了开发人员没有仔细看官方的DEMO。官方的DEMO里面不仅有代码示例,还有一个word文档,专门讲了遇到这种情况如何处理。

一、背景

开发环境是Windows Server,写的是C#的代码,用到了微信支付,当然是用到了企业付款的功能,下载安装了API证书,也因为近期微信根证书更换的事情,所以为了保险,也安装了微信支付提供的那两个CA证书,但是仍然报错,直接报请求被中止,未能创建 SSL/TLS 安全通道,这其实就意味着根本没有发起支付,所以推测应该是环境出了问题,但是环境能有啥问题啊,一共就2个证书,要么是CA那种根证书,要么就是API证书,翻来覆去安装了数十遍,一点效果都没有。

二、解决方案

一不小心,重新看了一下DEMO,看到了里面的文档,文档里面详细的介绍了解决方案。这个文档地址在微信支付提供的Demo外链,下载之后里面有解决方案,自己看。

实战的步骤是:

(1)打开mmc;

(2)选择文件-添加/删除管理单元,左边选择证书,点击添加,选择计算机账户,点击下一步,选择本地计算机(默认选择),点击完成后,再点确定。

(3)右键个人-证书,出现导入证书界面,安装步骤导入.p12格式的证书,导完之后右边出现刚刚导入的证书。

(4)到这一步,官方让你再试一试看看,我试了仍然不行,所以接着往下配置。

(5)去微软官方下载一个叫做WinHttpCertCfg.exe的安装文件,事实上你打开这个网址它就自动下载了。下载之后安装到服务器上。

(6)在64位系统下,安装之后工具在C:\Program Files (x86)\Windows Resource Kits\Tools路径下,使用CD指令定位到该目录下。

(7)使用刚刚安装的工具,给指定用户开证书的访问权限,这是创造奇迹的命令:

winhttpcertcfg.exe -g -c LOCAL_MACHINE\MY -s “证书名称,一般是公司名称” -a “NETWORKSERVICE”
(8)上面的证书名称,官方提示你了,你双击你安装的那个证书,看看颁发给那个字段是什么值这里就填写什么。

(9)可是你很可能和我一样,上面命令执行后发现虽然提示成功,但是仍然没有用,怎么办?接着把其他两个用户也授权试试吧。事实上你在执行下面第一条命令的时候有失败提示,无所谓,接着第二条,提示成功,这个时候再试试程序能够正常调用。

winhttpcertcfg.exe -g -c LOCAL_MACHINE\MY -s “证书名称,一般是公司名称” -a “ASPNET”
winhttpcertcfg.exe -g -c LOCAL_MACHINE\MY -s “证书名称,一般是公司名称” -a “Authenticated Users”

(10)如果还不行,那你继续战斗吧。我歇会。