用于新项目的 Linq to SQL

Posted

技术标签:

【中文标题】用于新项目的 Linq to SQL【英文标题】:Linq to SQL for a new project 【发布时间】:2010-11-22 10:42:00 【问题描述】:

我即将开始一个新项目,并且正在决定我将使用哪种数据访问技术...出于各种原因,我真的很喜欢 LINQ to SQL,但我应该使用实体框架来开始新项目吗?

我认为实体框架更加臃肿且不必要地复杂,因此是我考虑使用 LINQ to SQL 的部分原因......但正如我所说,这可能只是我的看法我没怎么用过实体框架。

那么人们会推荐我今天使用哪个来启动一个新项目(注意这个应用程序将在未来几年内出现)?

干杯 安东尼

编辑: 我们是 SQL Server 商店,因此我们不需要独立于数据库供应商。

通过使用与我的域对象一起使用的存储库模式来抽象数据访问 atm 是公认的最佳方法吗?

【问题讨论】:

讨论了很多次。请参阅:***.com/questions/364740/linq-2-sql-or-linq-entities 顺便说一句,您的看法是正确的。如果您不需要抽象数据库提供程序并且您的应用仅在 SQL Server 上,请不要使用 EF。 L2S 有很多恼人的限制,比如导航属性不是IQueryable,或者无法检索超过 2 层的嵌套数据结构(例如 Customer/Orders/OrderItems)单个 SQL 查询。一种尺寸并不适合所有人,我强烈建议在做出决定之前专门查看所有已知的 L2S 和 EF 限制,并了解它们如何满足特定项目的要求。这里没有“合理的默认值”。 【参考方案1】:

LINQ to SQL 是关于快速开发和简单性的。如果您的数据模型很复杂,或者可能变得复杂,那么最好使用更健壮的框架。

也就是说,比您的数据访问工具更重要的是您如何将其从其余代码中抽象出来。做对了,您应该能够从 LINQ to SQL 开始,并在超出它时(或当 EF 2 4 出现时)切换。

【讨论】:

【参考方案2】:

请注意,EF 1 远未完成。它缺少您在 LINQ to SQL 中找到的各种特性,其中更重要的特性之一是实际的外键属性(您能想象这些在 EF 1 中不存在吗?)

此外,EF 4 将几乎具有 LINQ TO SQL 的所有功能,并且两者都将生成相对可比的(代码方面)外部 API,因此除非您编写非常 LINQ to SQL 特定的 API,否则它应该相对容易要稍后迁移到 EF4,“只需”将 LINQ to SQL .dbml 替换为 EF4 的等效文件。

【讨论】:

在更新/插入语法、更改跟踪和并发冲突解决方面还有一些额外的复杂性,不应忽视。 当然,但是如果你封装了这些部分,并且主要使用 LINQ,过渡应该不会引起太多的麻烦。【参考方案3】:

Linq to SQL 在活动记录/每个类一个表的范例中效果最好。如果您需要跨越多个表的类,或者支持复杂的继承,那么它可能不是最佳选择。此外,Linq to SQL 本身并不支持多对多关系(有一些变通方法)。

如果这些听起来都不会影响您,那么 Linq 2 SQL 可能是一个不错的选择。这是一个很棒的轻量级数据访问策略。

考虑到上述限制,Linq to SQL 可以很好地用于实现存储库模式。 Google 将提供几个可行的 Linq 存储库示例。

【讨论】:

【参考方案4】:

您看过 Subsonic - 现在在第 3 版中,它基本上是一个 linq to sql DAL,它可以在 5 分钟内完成整个数据库的完整 linq to sql。它使用 T4 模板,所以如果你想添加到模板中,它是 REALLY EASY

http://www.subsonicproject.com/

【讨论】:

【参考方案5】:

我写了一篇很长的关于选择 .NET ORM 的博文:

.NET and ORM - Decisions, decisions

基本上,NHibernate 是您的最佳选择。如果您坚持使用像 LinqToSql 这样简单的东西,请考虑 SubSonic。我不会推荐任何一个 Microsoft 选项:LinqToSql 或 EntityFramework。

决定是否使用存储库模式取决于您的需求。

【讨论】:

我记得 NHibernate LINQ 支持在它可以处理的查询类型方面相当有限(即,编写一个不那么简单的查询并让它无法处理它是相当容易的),并且通常标记为“实验性“作者。这有变化吗? 我可以推测 Linq 的各种 ORM 支持级别,但就这方面的数据而言,我还没有看到任何真实的数据。这个讨论应该基于真实数据,据我所知,这些数据不存在。收集这些数据似乎需要付出相当大的努力。【参考方案6】:

查看:http://www.icemanind.com/Layergen.aspx

【讨论】:

以上是关于用于新项目的 Linq to SQL的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL 类到我自己的类

已安装LINQ2SQL,但类库项目中的“添加新项”列表中缺少LINQ To SQL类

如何编写这个 Linq-to-SQL 选择查询

NHibernate 或 LINQ to SQL [关闭]

在 ASP.NET MVC2 项目中使用 LINQ to SQL

用 LINQ to SQL 或 LINQ to EF 替换 NHibernate