2009-10-06 60 views
1

有几个“应该我选择了这样或那样的”关于SO和谷歌的问题,还有很多比较LINQ2SQL和LINQ2E。我见过的缺点,差异,缺点,优点,局限性等从旧数据层来的LINQ to SQL /实体框架

我不能说我是专家,但我想知道“你会做什么”,如果你遇到这种情况和原因。

我要的东西添加到“老” 2.0应用程序,最近已迁移到3.5(它种编出来的方块,在这里和那里的一些警告)。由于我不得不添加新的东西,我想开始使用LINQ(2SQL或实体)。

我以前和Linq2SQL一起工作过,我喜欢它是一个快速,易于使用的解决方案...... 如果你不想做太奇怪的事情。如果你来自旧的“记录集”,表格之间的自然1..1关系是天赐之物。同样不错的是,根据您想要使用的表格集合,可以拥有不同的数据上下文。

随着事物和新功能的数量增长,我已经开始考虑尝试实体框架,而不是LINQ2SQL的可能性。我不喜欢后者是无法处理Many2Many关系,而不诉诸于hack

这就是实体框架的用武之地。,你不能有多个“小模特”像你LINQ2SQL和“datacontexts”这样做,除非你牺牲some的东西,有些东西other

数据库有218台,现在,它并没有显着增长。不时有新桌子,但我们并不是每天谈论10桌。我想说,在接下来的一年里,我们将有一个“困难时期”达到250张桌子。

许多2个多关系,有些与PK /只PK和一些与骨料(其中实体框架不magically handle,但它可以对付他们。这就是为什么我不希望的原因从LINQ2SQL开始,除非hack是“OK”并且是可接受的方法。

你会做什么?妥协N..N关系(即使存在黑客攻击,它也不会像优雅, “作为一个集成的解决方案),并与Linq2SQL和”有很多小的数据环境,你创建和销毁“哲学,或者,另一方面,与实体框架继续,有一个巨大的数据模型与所有表或关系,并从那里开始? 即使创建多个模型存在缺点(请参阅此处的链接),并让一个巨型模型具有缺点。

也有关于微软“放弃”Linq2SQL的非官方评论(我怀疑,但你永远不知道)。我们的数据库是MSSQL,我不会很快看到变化。

在这个问题上的任何经验将不胜感激。

+0

你是否已经习惯了使用LinqToSql/EntityFramework附带的O/R设计器的概念?看起来你坚持有这种支持,但你有200多张桌子。在这个规模上,像SQLMetal/EdmGen可能会提供更好的整体体验。 [转换一个LinqToSql DAL到的EntityFramework]的 – 2009-10-06 13:02:29

+0

可能重复(http://stackoverflow.com/questions/787807/converting-a-linqtosql-dal-to-entityframework) – 2013-09-20 20:42:41

回答

1

我正在处理Linq2SQL中的多对多关系。

看到here为neato扩展方法来解决你的痛苦!

就个人而言,我觉得用一个整体模式是最容易处理的。

+0

虽然我喜欢的溶液(多达一个我链接),它仍然有点复杂,需要dbml手动编辑(添加属性),并打破设计器。 “一个单一模型”是指实体模型还是一个Linq2sql数据上下文? – 2009-10-06 10:39:56

+0

我没有使用EF,所以我的意思是Linq2SQL。 Linq2SQL的定制生成工具很少,这使得修改变得更容易。我使用http://www.codeplex.com/l2st4的重大修改版本来修复所有内容,只需将所有表格拖动到设计器表面即可。 – leppie 2009-10-06 11:02:44

+1

我有一个在单个Linq-to-SQL模型中有400多个实体的模型。工作得很好。如果您在.net 3.5下执行此操作,请使用L2S。当4.0出来并且稳定时,可能需要重新评估EF,但EFv1对于比NorthwindEF db更复杂的任何东西都有太多showstoppers ...... JMHO – KristoferA 2009-10-06 11:18:12

0

我会在你的情况下做什么?我会使用NHibernate和Castle Active Record。

为什么?因为该解决方案为“真实世界”场景提供了最好的支持,尤其是您提到的场景。 NHibernate与你的项目进行比例缩放,并不限制你。它基本上是免费的。 NHibernate是一个非常成熟,经过充分测试的解决方案。

你不提NHibernate的,你正在寻找到的东西,所以我不知道什么并不在这方面吸引你(好像你已经阅读不够,你会遇到那个选项)。

LinqToSql /的EntityFramework不提供一大堆,你也无法与NHibernate得到。

+1

我之所以没有考虑过NHibernate,是因为我们已经使用了作者已经放弃的旧ORM(温柔)。我们不想跳进另一个可能会在未来消失的项目(不管它多么成熟),再加上我刚开始时很难掌握的事实(据我所见/读/听)。此外,Linq提供了一个很好的语法。 ;) 当我们选择温柔的NHibernate时,那是因为Gentle是“更好,更快和未切割”。我想这是在2005年的一个错误的决定:S – 2009-10-08 11:01:53

+0

这就是说,我不放弃NHibernate,因为它现在看起来非常成熟,但我恐怕它可能会导致一步学习曲线... ... – 2009-10-08 13:00:06

+0

NHibernate支持Linq 。在我看来,NHibernate与其他ORM具有相似的学习曲线。有些ORM看起来似乎比实际更简单。 :)大多数“简单”的ORM就是这样,因为它们缺乏特性和处理许多真实世界场景的能力。如果您必须选择其中一种Microsoft ORM解决方案并且您对未来感到担忧,那么EntityFramework将拥有更加光明的未来。 – 2009-10-08 14:01:43