“Linq to SQL”是什么?

6

我和一位同事讨论了“Linq to SQL”的问题。我在.NET方面还很新,所以他认为我需要学习更多(不过,总共30年的编程经验应该对我有帮助,对吧?)我读了一些书,决定在新项目中使用ADO.NET实体数据模型。我的同事不同意,因为他“知道”实体存在很多问题。它会导致数据库服务器的内存泄漏,并且微软将要停止支持它。他告诉我应该使用Data Module代替。只需在我的项目中添加.dbml文件,然后在其上使用Link。

他有5年的.NET经验,比我的经验多4年。

我克制住自己,没有称他为白痴或傻瓜,因为我觉得他似乎认为“Link to SQL” == “Entity Data Model”...

但是,我开始有一些小小的疑虑。我认为Linq to SQL是基于.dbml文件,因此基于数据模型。我听说Linq to SQL确实存在一些技术问题,并且很快就会被实体模型取代。如果我的同事混淆了这两个概念,那么他就是一个彻头彻尾的白痴。但是,由于他有5年的经验,而且我怀疑我的雇主甚至不会雇佣白痴,我开始有疑虑。

那么,“Linq to SQL”究竟是什么?

2个回答

20

LINQ to SQL和Entity Framework不是同一种东西。

它们都是来自微软的ORM,都可以作为LINQ提供程序。LINQ to SQL首次出现在.NET 3.5中,而Entity Framework是在.NET 3.5 SP1中引入的。

确实,微软正在更喜欢使用Entity Framework而不是LINQ to SQL,尽管社区中很多人仍然敦促他们改善LINQ to SQL-它比EF更简单。为此,微软表示将努力使EF在只需要简单模型时更容易使用。

LINQ to SQL只适用于特定数据库-SQL Server和SQL Server CE主要。Entity Framework(至少在理论上)更具有数据库的普适性,因此数据库供应商可以插入自己的提供程序。


4
回答很好!我只是想解决一下Alex同事提到的“内存泄漏”的问题。ORM并没有以任何特殊的方式访问数据库。它们执行与其他人一样的SELECT、UPDATE和INSERT语句,只是将结果转换为对象(而不是在数据库中进行转换)。由于数据库甚至不会知道ORM正在查询它,那么ORM怎么会比其他用户更容易导致内存泄漏呢?根据我的经验,有经验的人可能会在无意识的情况下猜测、假设或填补他们的知识空白(我也这样做),这有时可能导致说出不准确的话。 - Allon Guralnek
Jon,你真的有工作吗?我看到你在各个地方发布了很棒的答案,为社区做出了巨大的贡献。 - Jason Short
@Jason:我有空,但不在周六 :) - Jon Skeet

2
如果你的朋友认为LINQ to Entities将要被淘汰,那么他是错的:
LINQ to SQL将继续得到支持,但未来不会再有太多扩展。LINQ to Entities将会一直存在,并且是微软.NET首选的数据访问框架。

+1 确实如此!而且,这表明我的同事是个白痴,因为一个有经验的 .NET 开发人员应该知道其中的区别。哦,好吧……我只是简单地声明我继续使用实体,这样他就决定不再干涉了。 - Wim ten Brink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接