我一直在调查什么数据层,使用一个新的基于网络的项目,我设计的而且我非常热衷于看纳入皇宫SQL。其明显的简单、灵活性和设计师的支持真的申诉和隐含的领带到SQL服务器是好的。

然而,它已宣布在最近皇宫SQL将把后座的实体的框架,现在,它已经通过了的ADO.NET 队(http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx).肯定的是,它将支持在未来,但这是不可能的,它会看到更多的发展工作。

铭记这一点,你会推荐我使用这种技术对我的项目,或是价值无论是选择一个备选对象(原则才能享受它的全部好处?) 或手工编码立一个通用德尔?

该项目本身是ASP.NET 和SQL服务器2005/2008基础,并将可能使用视,即使它仍处于测试阶段。它是一个个人项目,该数据库将不会过于复杂,它将主要用作一个原型,来看看。净的未来技术。我会根据今后的项目上我从中学到的一个虽然,所以我做出的选择将影响较大的解决方案来。

是的,我意识到,微软将可能带来一个全新的数据接入技术的明天呢!;)

有帮助吗?

解决方案

那么,它主要是在覆盖这里的答案已经(看一些有趣的点为好),但是我要再说一遍反正..

的LINQ to SQL(L2S)是非常通用的,但感觉一点点从我的观点太基本。在大多数情况下,它确实在做简单的事情做好,但只要你问多一点的话,它得到昂贵。这根本不是一个坏事。其实,我觉得的LINQ to SQL真正的suppliments实体框架很好。

以自动寻呼用的LinqDataSource例如。如果不指定排序/组到那时,它是相当经济的。扔订购或分组到组合和你开始得到性能上的尖峰(变得非常健谈)。然后,您几乎必须写自己的分页实现(这是不太难,我承认)。

我将是第一个承认L2S在生成的T-SQL的质量而言具有以下优点:在所述实体框架(我应,因为L2S是专门用于查询的SQL Server内置),并且在概念和symantically,太多的LINQ to SQL的相似,EF,但如果你打的墙是扩大对更复杂的实施要求的需要和考虑。

如果我是从头开始,并选择投入个人发展的时候,我会选择实体框架。有趣的是,我的工作在其使用L2S当下一个项目,它被设计规模NAD处理重物,但是当我们打了一些比较“创意”的要求,我们往往不得不在SQL金属扩张(例如许多一对多关系)。

所以..在短..我接近它这样的:

一)学习的LINQ to SQL作为一个前奏(微软的ORM模式和技术)..它可以让你熟悉其中大部分都与实体框架共享的基本面,和LINQ风格查询的味道(后天的味道如果有在T-SQL中的背景)

B),一旦你已经有了一个手柄上的LINQ to SQL,我建议跳过的实体框架来学习额外的好处(ESQL等)

c)执行在这两个概念项目的证明,并比较结果。

其他提示

接NHibernate的。它会停留一段时间了作为一个概念或实际ORM。 因此,这将是有用的同时学习。

IMO,这件事是真的夸大了。

微软没有说的LINQ to SQL就死定了。他们更表示会被合并到实体框架。

我将集中于使用实体框架作为溶液,知道许多LINQ到SQL的将被卷成它。

有真的是没有太大的差别,现在反正。最大的抱怨是,实体框架是不轻的重量。这个真的还重要,只要你有你的层与层之间良好的分离?

L2S是,恕我直言,完全没有事情是这样的,当你已经说过了,是不会去任何地方。我工作的公司取得了它我们的标准的数据访问和我们使用的时候,一切从少5个用户利基应用向超过1000家很大的成绩用户企业应用程序。

值得一提的是,这个网站使用LINQ到SQL建。杰夫谈到使用它的StackOverflow的播客。

我使用L2S倚重我当前的web项目,我相信你会发现是相互矛盾的关于做n层数据库发展的最佳途径文件的最大挂机。

首先你需要认识到前期是什么,DataContext的对象的意味着只持续只要工作,周期的单位。此外,的DataContext的是无状态的。一旦你来到这两个校长交手,在N层环境中使用LINQ开始工作。

在另一方面,你会看到很多人推荐了一些非常非常非常糟糕的方式来使用Linq。永远不要让你的DataContext静态的,这是我做早了一个错误,它创造了奇迹,直到它不工作,然后将它用在不同的会话不正确的数据交叉等简单的说绝对可怕,这也许是最大的最巨大的禁忌使用LINQ,并应在每个文档中的大粗体字写的。此外,在会话变量持续一个DataContext同样是一个好主意。

唯一的其他主要讨厌我遇到了与LINQ做一个断开的更新时,您需要在整个呼叫使用相同的DataContext。例如:

    public static void UpdateUser(UserLibrary.User user) {
        using (UserLibraryDataContext dc = new UserLibraryDataContext(_conStr))
        {
            UserLibrary.User newUser = (from user2 in dc.Users where user2.UserID == user.UserID select user2).FirstOrDefault();
            newUser.Email = user.Email;
            newUser.FirstName = user.FirstName;
            newUser.LastName = user.LastName;
            dc.SubmitChanges();
        }        

您不能简单地通过在不同的datacontext创建的用户,并期望更新工作,除非你设置DataContext.ObjectTrackingEnabled =假,我不会推荐。相反,你应该检索现有对象,更新其值的相同的DataContext内,然后提交的更改。保持相同的DataContext内的所有像任务。

我会建议L2S不过,一旦你得到了一些琐碎的问题(如上述),这是一项伟大的技术和definatly节省时间。不过,我建议做在你的DAL薄的包装,所以你可以很容易地改变。我正在考虑(由于经济原因)移植我的代码的一部分使用的OpenAccess ORM - > MySQL的我的数据访问部分,并用正确定义层,这个任务应该只需要我几个小时。

我同意Echostorm。 L2S有利于您的需求。它是很容易的工作...

如果你正确地设计你的应用程序和隔离数据访问层好了,你应该去L2S。从我从您的文章推断,这不是一个大项目,所以应该L2S满足你的要求就好,而普通的旧ADO.NET只是一个没有没有,和Entity Framework,是...只是不使用它, 好? 无论如何,如果你隔离你的DAL好了,你可以交换L2S到别的东西,将来如果项目的发展。即使是L2S不会去任何地方,它不会去任何地方。 MS停止投资于它,但它不会成为过时的或什么的,所以它仍然是一个安全的投资。 可替换地,应该评估NHibernate的,这是简单和成熟。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top