【发布时间】:2009-10-06 10:23:15
【问题描述】:
在 SO 和 Google 上有一些“我应该选择这个还是那个”的问题,还有很多比较 LINQ2SQL 和 LINQ2E 的问题。我已经看到了缺点、差异、缺点、优点、限制等。
我不能说我是专家,但我想知道如果你遇到这种情况“你会怎么做”以及为什么。
我必须向最近迁移到 3.5 的“旧”2.0 应用程序添加一些东西(它是开箱即用的编译,到处都有一些警告)。因为我必须添加新的东西,所以我想开始使用 LINQ(2SQL 或实体)。
我过去曾使用过 Linq2SQL,我喜欢它是一种快速、易于使用的解决方案……如果您不想做任何太奇怪的事情。如果您来自旧的“记录集”,那么表等之间的自然 1..1 关系是天赐之物。同样不错的是能够根据您要使用的表集来拥有不同的数据上下文。
随着事物的数量和新功能的增长,我开始考虑尝试使用实体框架而不是 Linq2SQL 的可能性。我不喜欢后者的是,如果不诉诸 hack,就无法处理 Many2Many 关系。
这就是实体框架的用武之地。但是,你不能像使用 Linq2Sql 和“datacontexts”那样拥有多个“小模型”,除非你牺牲 some 的东西和一些other 东西。
该数据库目前有 218 个表,并且没有显着增长。时不时地有一张新桌子,但我们不是在谈论每天 10 张桌子。我想说,在接下来的一年的开发中,我们将“艰难地”达到 250 张桌子。
有Many 2 Many关系,有些仅与PK/PK有关,有些与聚合(Entity Framework没有magically handle,但它可以处理它们。这就是原因为什么我不想从 Linq2SQL 开始,除非 hack 是“好的”并且是可接受的方法。
你会怎么做?妥协 N..N 关系(知道即使有黑客攻击,它也不会像集成解决方案那样优雅或“受支持”)并使用 Linq2SQL 及其“拥有许多您创建和销毁的小型数据上下文”的理念或,另一方面,继续使用实体框架,拥有一个包含所有表或关系的 巨大 数据模型,然后从那里开始? 即使创建多个模型也有缺点(请参阅那里的链接)并且拥有一个巨大的模型也有缺点。
还有关于微软“放弃”Linq2SQL 的非官方 cmets(我怀疑,但你永远不知道)。我们的数据库是 MSSQL,我认为这种情况不会很快改变。
我们将不胜感激。
【问题讨论】:
-
您对使用 LinqToSql/EntityFramework 附带的 O/R 设计器的概念有多满意?您似乎坚持要获得这种支持,但您有 200 多张桌子。在这种规模下,像 SQLMetal/EdmGen 这样的东西可能会提供更好的整体体验。
标签: .net linq-to-sql entity-framework orm linq-to-entities