【问题标题】:Confusing MVC and LINQ to SQL混淆 MVC 和 LINQ to SQL
【发布时间】:2013-04-28 12:01:02
【问题描述】:

在本教程http://mstecharchitect.blogspot.com/2009/08/aspnet-mvc-and-linq-to-sql-using.html 中,他们建议在 MVC 中使用 LINQ to SQL。然后他们创建一个存储库,基本上使它看起来更像实体框架(使用 Add()Delete() 等方法代替 LINQ 的 InsertOnSubmit()DeleteOnSubmit()

我的问题是,我应该在这里做什么?我喜欢使用 LINQ,但我觉得如果我放弃 LINQ to SQL 的实体框架,它会破坏 MVC。

LINQ to SQL 生成以下行:

public partial class DataClasses1DataContext : System.Data.Linq.DataContext

所以,我只能使用InsertOnSubmit() 等方法,而不能使用Add() 等实体框架中的方法。

听起来 LINQ to Entities 将是答案,但我不确定它是如何发挥作用的......

我还在这里看到了 Linq.DataContext to Entity.DbContext? 的 cmets,这似乎暗示这是一种不好的做法......

【问题讨论】:

  • ASP.NET MVC 与任何 OR 映射器没有紧密联系。选择 LINQ to SQL 或实体框架或任何其他合适的框架。请注意,不再积极开发 LINQ to SQL。
  • Microsoft 为您提供了实体框架,您非常倾向于使用可视化设计器。但是,许多人更喜欢使用代码优先方法。
  • 在 Visual Studio 中添加一个新项目:ADO.NET 实体数据模型
  • jinaldesai.net/linq-to-sql-vs-entity-framework 不要做 XX,因为 YY 做了这个..
  • 根据您发布的文章,我认为 LINQ to SQL 将支持我的需求。谢谢!

标签: asp.net-mvc linq-to-sql asp.net-mvc-4 linq-to-entities


【解决方案1】:

首先,请注意该文章上的日期。它是从 2009 年开始的。这意味着它在 Visual Studio 2010 和 .net 3.5 之前。文章讲的是Entity Framework 1.0,有很多问题,所以经常推荐使用Linq to SQL而不是EF 1.0。

但是,从 VS 2010 和 EF 4.0 开始,大多数这些问题都得到了解决,并且现在 EF 是优于 Linq to SQL 的首选方法。 L2S 仍受支持,但 Microsoft 不再对其进行任何重大改进。

正如其他人在 cmets 中提到的,MVC 与数据库无关。您可以使用任何数据库技术,它不依赖于任何方式的 EF。您可以使用 EF、L2S、nHibernate、ADO.NET 等...您不会“破坏 MVC”,因为 MVC 没有您的数据库技术的概念。

许多人仍然在 EF 之上实现存储库和工作单元(尽管我个人认为这是额外的工作,除非您计划需要一个允许您更改技术的数据库抽象)。

编辑:

在进一步阅读这篇文章后,我没有看到它在任何地方推荐 L2S 而不是 EF,事实上在文章的末尾它有这样的评论:

假设如果您想使用 EF(实体框架)而不是 LINQ TO SQL 更改数据访问技术,您只需使用使用替代数据库访问技术的类实现 IStudentRepository 接口

【讨论】:

  • EF 的可视化设计器看起来与 LINQ to SQL 相同。也许我会使用它,以防它具有 LINQ to SQL 所没有的东西。看起来 L2S 会做我需要的一切,虽然......无法想象我需要做的任何事情它做不到。将问题留待一段时间,以防其他人有什么要补充的。谢谢你的回答。
  • @user1477388 - L2S 有很多限制,例如它不直接支持多对多连接。
  • 你的意思是如果我想在 LINQ 中进行连接,我必须写一个像 from x in myTable join y in myOtherTable on x.a equals y.a 这样的查询?
  • @user1477388 - 不,这不是多对多的加入。多对多使用连接表。在 EF 中,这可以表示为单个导航属性,而在 L2S 中,您必须以非常丑陋的方式从两侧查询 Join 表。
  • @user1477388 - 是的,您可以编写 linq 查询,但如果您想使用它,可以使用一种特殊的 EF 查询语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多