Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架与LINQ到SQL_.net_Entity Framework_Linq To Sql - Fatal编程技术网

.net 实体框架与LINQ到SQL

.net 实体框架与LINQ到SQL,.net,entity-framework,linq-to-sql,.net,Entity Framework,Linq To Sql,既然.NETV3.5SP1已经发布(与VS2008SP1一起发布),我们现在可以访问.NETEntityFramework了 我的问题是。当试图决定使用实体框架和LINQtoSQL作为ORM时,有什么区别 按照我的理解,实体框架(与LINQtoEntities一起使用时)是LINQtoSQL的“老大哥”?如果是这样,它有什么优势?它能做什么,而LINQ to SQL自己做不到的呢?在@lars posted的那篇文章中有一些明显的区别,但简短的回答是: L2S将对象属性与数据库的特定字段紧密耦

既然.NETV3.5SP1已经发布(与VS2008SP1一起发布),我们现在可以访问.NETEntityFramework了

我的问题是。当试图决定使用实体框架和LINQtoSQL作为ORM时,有什么区别


按照我的理解,实体框架(与LINQtoEntities一起使用时)是LINQtoSQL的“老大哥”?如果是这样,它有什么优势?它能做什么,而LINQ to SQL自己做不到的呢?

在@lars posted的那篇文章中有一些明显的区别,但简短的回答是:

  • L2S将对象属性与数据库的特定字段紧密耦合,或者更正确地将对象映射到特定数据库模式
  • L2S只能与SQL Server一起工作(据我所知)
  • EF允许将单个类映射到多个表
  • EF将处理M-M关系
  • EF将能够针对任何ADO.NET数据提供程序

最初的前提是L2S用于快速开发,EF用于更多的“enterprisey”n层应用程序,但这使得L2S的销量有点不足。

我认为快速而肮脏的答案是

  • LINQtoSQL是一种快速简便的方法。这意味着,如果你正在做一些更小的东西,你会走得更快,交付得更快
  • 实体框架是一种全面、无障碍的方法。这意味着如果你正在做一些更大的事情,你会提前花更多的时间,发展较慢,并且有更多的灵活性

如果您的数据库简单明了,LINQ到SQL就可以了。如果需要在表的顶部添加逻辑/抽象实体,请选择实体框架。

LINQ to SQL仅支持Microsoft SQL Server中可用的数据库表、视图、存储过程和函数的1对1映射。这是一个很好的API,用于快速构建对设计相对良好的SQL Server数据库的数据访问。LINQ2SQL是在C#3.0和.Net Framework 3.5中首次发布的

LINQ to Entities(ADO.Net实体框架)是一个ORM(对象关系映射器)API,它允许广泛定义对象域模型及其与许多不同ADO.Net数据提供程序的关系。因此,您可以混合和匹配许多不同的数据库供应商、应用程序服务器或协议,以设计由各种表、源、服务等构建的对象的聚合mashup。ADO.Net Framework随.Net Framework 3.5 SP1一起发布

这是一篇关于MSDN的介绍性文章: 乔纳森·艾伦为InfoQ.com撰写

马特·沃伦(Matt Warren)将[LINQ to SQL]描述为“根本不应该存在”的东西。本质上,它应该是帮助他们开发LINQ,直到真正的ORM准备好

实体框架的规模导致它错过了.NET3.5/VisualStudio2008的最后期限。它及时完成了不幸命名为“.NET3.5ServicePack1”的版本,它更像是一个主要版本,而不是一个服务包

由于复杂性,开发人员不喜欢[ADO.NET实体框架]

从.NET4.0开始,LINQtoEntities将是LINQtoRelational场景的推荐数据访问解决方案


我的印象是,如果Linq2Sql不能满足您的需要,那么您的数据库非常庞大或设计非常糟糕。我有大约10个网站,无论大小都使用Linq2Sql。我已经看过和实体框架很多次了,但我找不到在Linq2Sql上使用它的好理由。也就是说,我尝试使用我的数据库作为模型,所以我已经有了模型和数据库之间的1对1映射


在我目前的工作中,我们有一个包含200多个表的数据库。一个旧的数据库,有很多糟糕的解决方案,因此我可以看到实体框架优于Linq2Sql,但我仍然希望重新设计数据库,因为数据库是应用程序的引擎,如果数据库设计糟糕且速度慢,那么我的应用程序也会很慢。在这样一个数据库上使用Entity framework似乎是一个快速修复方法,可以掩盖糟糕的模型,但它永远无法掩盖您从这样一个数据库中获得的糟糕性能。

我在Entity framework方面的经验还不太好。首先,您必须从EF基类继承,所以向POCOs说再见。您的设计必须围绕EF。使用LinqtoSQL,我可以使用现有的业务对象。此外,没有延迟加载,您必须自己实现。有一些解决方法可以使用POCO和延迟加载,但它们存在于IMHO中,因为EF还没有准备好。我打算在4版

以后再回到它。P>我想如果你需要开发一些快速的东西,中间没有奇怪的东西,你需要有实体来代表你的表:


Linq2Sql可以是一个很好的联盟,将它与LinQ一起使用可以释放出一个很好的开发时间。

两者都不支持独特的SQL 2008数据类型。从我的角度来看,不同之处在于,在未来的某个版本中,实体仍然有机会围绕我的地理数据类型构建一个模型,而Linq to SQL将永远不会被放弃


想知道nHibernate或OpenAccess是怎么回事…

我发现在使用EF时,我不能在同一个数据库模型中使用多个数据库。但是在linq2sql中,我可以只通过在模式名称前面加上数据库名称


这是我最初开始使用linq2sql的原因之一。我不知道EF是否允许此功能,但我记得阅读时,它是为了不允许此功能。

我找到了一个非常好的答案,用简单的话解释了何时使用此功能:

使用哪种框架的基本经验法则是如何规划 在表示层中编辑数据

  • Linq To Sql-如果您计划编辑一对一文档,请使用此框架 关系
    var result = (from metattachType in _dbContext.METATTACH_TYPE
                    join lineItemMetattachType in _dbContext.LINE_ITEM_METATTACH_TYPE on metattachType.ID equals lineItemMetattachType.METATTACH_TYPE_ID
                    where (lineItemMetattachType.LINE_ITEM_ID == lineItemId && lineItemMetattachType.IS_DELETED == false
                    && metattachType.IS_DELETED == false)
                    select new MetattachTypeDto()
                    {
                        Id = metattachType.ID,
                        Name = metattachType.NAME
                    }).ToList();
    
                return await _attachmentTypeRepository.GetAll().Where(x => !x.IsDeleted)
                    .Join(_lineItemAttachmentTypeRepository.GetAll().Where(x => x.LineItemId == lineItemId && !x.IsDeleted),
                    attachmentType => attachmentType.Id,
                    lineItemAttachmentType => lineItemAttachmentType.MetattachTypeId,
                    (attachmentType, lineItemAttachmentType) => new AttachmentTypeDto
                    {
                        Id = attachmentType.Id,
                        Name = attachmentType.Name
                    }).ToListAsync().ConfigureAwait(false);
    
                return (from attachmentType in _attachmentTypeRepository.GetAll()
                        join lineItemAttachmentType in _lineItemAttachmentTypeRepository.GetAll() on attachmentType.Id equals lineItemAttachmentType.MetattachTypeId
                        where (lineItemAttachmentType.LineItemId == lineItemId && !lineItemAttachmentType.IsDeleted && !attachmentType.IsDeleted)
                        select new AttachmentTypeDto()
                        {
                            Id = attachmentType.Id,
                            Name = attachmentType.Name
                        }).ToList();