C# LINQ到SQL还是实体,在这一点上?

C# LINQ到SQL还是实体,在这一点上?,c#,.net,asp.net,linq-to-sql,linq-to-entities,C#,.net,Asp.net,Linq To Sql,Linq To Entities,我比赛迟到了一点,决定利用业余时间学习LINQ。作为练习,我将在MVC2中重写一个WebForms应用程序(对我来说也是新的)。我设法在这里找到了一些关于LINQ的主题(,),这引起了我对实体与SQL的关注 然而,这些线程都已经有一年多的历史了,我似乎找不到关于哪个ORM更可取的确切信息。在这一点上,实体是否或多或少符合SQL 2.0?使用起来还难吗 是否有任何理由使用LINQtoSQL,或者我应该跳转到实体中?我在目前的雇主编写的应用程序有很长的生命周期(约10年),因此我正在尝试选择可用的最

我比赛迟到了一点,决定利用业余时间学习LINQ。作为练习,我将在MVC2中重写一个WebForms应用程序(对我来说也是新的)。我设法在这里找到了一些关于LINQ的主题(,),这引起了我对实体与SQL的关注

然而,这些线程都已经有一年多的历史了,我似乎找不到关于哪个ORM更可取的确切信息。在这一点上,实体是否或多或少符合SQL 2.0?使用起来还难吗


是否有任何理由使用LINQtoSQL,或者我应该跳转到实体中?我在目前的雇主编写的应用程序有很长的生命周期(约10年),因此我正在尝试选择可用的最佳技术。

在最近一篇关于扩展NerdDinner的帖子中,谈到了这一点。在结尾引用:

结论

数据库有很多选择 访问.NET。你会遇到 旧版本或高度调优版本中的数据读取器 代码,但没有理由不能 隐藏在存储库中,但仍然是 使用方便LINQ到SQL很好, 重量轻,速度快,有几十个 NET 4中的错误修复,但实体 框架是他们前进的方向 前进。Plus,实体框架 4比EF3.5好得多,所以我 将其用于任何“大于小”的情况 我正在做而没有的项目 麻烦多了


虽然我还没有机会玩它,但EF4似乎已经赢得了很多职业选手的信任

我建议使用实体或NHibernate,Linq将数据库与域对象紧密耦合,然后由表示层使用。这将导致从表示层到数据库的紧密耦合,这往往是不可取的

就我个人而言,我喜欢EntityFramework4.0,您可以使用linq查询和自己编写的POCO对象。它只为您处理所有的数据库/SQL内容

与Hanselman的文章类似。它将DataReader(他们称之为“连接的”数据访问)、类型化数据集(“断开连接”)、LINQ与SQL和实体框架进行比较。给出了所有方法的详细代码示例,以及每种方法的优缺点

是否有任何理由使用LINQtoSQL,或者我应该跳转到实体中

我几乎不客观(作为一个死硬的LinqToSql用户),但这是可以回答的

对象关系映射技术是解决或减轻对象关系阻抗不匹配的尝试。它们是两个世界之间的桥梁——对象世界和关系数据世界

似乎这些桥梁的开发商通常称之为“家”

LinqToSql是对象端的ORM。它由C#团队开发,允许您使用对象来表示数据。在LinqToSql中,没有编译器不透明字符串,编译器将根据映射检查所有查询

EF是数据端的ORM。它由ADO团队开发,允许您使用表示为对象的数据。在EF中,有大量不透明字符串

查询最终必须针对数据库运行,编译器无法证明运行时可用的数据库与映射匹配(在两种ORM中均为true)。由于数据世界的这种现实,数据团队不像C#团队那样重视编译器保证

在TSQL后端工作多年,没有编译器的保护,我非常重视编译器将给我的任何帮助。因此我在这方面支持C#团队


例如,向客户加载其订单

  //linq to sql.
DataLoadOptions load = new DataLoadOptions();
load.LoadWith<Customer>(c => c.Orders);  //<-- strong typed
myDataContext.LoadOptions = load;

IQueryable<Customer> query = myDataContext.Customers
  .Where(c => c.CustomerId == 1);

  //entity framework
IQueryable<Customer> query = myObjectContext.Customers
  .Include("Orders")  // <-- opaque string
  .Where(c => c.Customer.Id == 1);
//linq到sql。
DataLoadOptions load=新的DataLoadOptions();
load.LoadWith(c=>c.Orders);//c、 CustomerId==1);
//实体框架
IQueryable query=myObjectContext.Customers
.Include(“Orders”)//c.Customer.Id==1);

2009年初,我仔细研究了这两种技术,听到了很多关于LINQ to SQL“即将死亡”的传言。最后,我还是选择了LINQ to SQL而不是实体框架,因为我从来都不喜欢使用ADO.NET,而EF让我想起了太多,因为它与数据库的联系太紧密了

在我的开发项目中,我的历史一直是:

  • 构建模式
  • 构建使用架构的数据库对象
  • 构建与数据库对象对话的数据层
  • 构建与数据层对话的业务层
  • 有了EF,几乎不会有什么变化。使用LINQ to SQL,我能够完全消除步骤2,这样数据层就可以直接与数据库通信,而不必担心动态SQL语句或潜在的注入漏洞。此外,在开发周期中,我还受益于一个简单得多的变更管理过程。我真的不在乎微软的“官方”立场是什么,因为我听说WinForms的“即将死亡”已经有五年了,而且它仍然存在


    微软首先是一家企业。如果他们想继续经营,他们会给客户他们想要的,否则客户会发现其他人更愿意满足他们的需求。如果只针对目前仍在使用的旧式应用程序,只要Windows操作系统仍支持Windows 95应用程序,WinForms就将得到支持。同样,LINQtoSQL将继续以某种形式受到支持。在它能够无缝地合并到EF中之前,现有的应用程序将按照最初设计的方式运行(或者通过最小的开发人员修改),我相信LINQ to SQL在可预见的未来也会继续存在。

    现在.Net 4.0已经过时了,重新讨论这个问题很好,这两种技术都有很多变化