2008-10-27 144 views
7

我刚开始使用LinqToSql创建我的数据访问层。每个人都在谈论酷语法,我真的很喜欢Linq。LinqToSql最佳实践

但是当我看到你的类是如何在LinqContext上拖动一些表的时候产生的,我很惊讶:没有人需要这么多的代码?!

因此,我查看了其他人如何使用LinqToSql,例如Rob Connery在他的StoreFront Demo中。

因为我不喜欢所有这些代码生成的方式,所以我创建了我的领域层,并使用生成的类作为参考。有了这个解决方案,我很好,因为我可以使用Linq提供的功能(延迟执行,延迟加载......),并且我的域图层很容易理解。

你是如何使用LinqToSql的?

回答

6

创建的类不像看起来那么沉重。当然,它需要很多代码,但总的来说,它的功能与其提供的功能一样轻巧。

我也用来创建自己的表,但现在我只是使用LINQtoSQL DataContext。为什么?创建更简单,功能更好,互操作性更好,甚至可能比我自己的东西更快(不是每个方面都是如此)。通常我自己的东西在一件事情上非常快,但其他东西中的东西速度更快)。
但最重要的部分是:将新开发人员引入LINQ的东西比将自己的东西更容易。有一些教程,示例代码,文档,一切,我必须自己为我的代码创建。与使用其他技术(如WCF或数据绑定)的东西一样。有很多缺陷需要照顾。

我学会了不要把自己发展成一个艰难的角落,一开始看起来既快又简单,比学习如何使用库更有趣,但在一段时间之后真的很痛苦几个月后,通常甚至是我自己。

过了一段时间,创建我自己的数据容器的新事物消失了,我注意到与添加功能相关的痛苦。如果我使用了提供的类,我可以免费获得一个功能。
接下来,我不得不向其他程序员解释我的代码。如果我使用了提供的课程,我可以指示他访问某个网站以了解这些内容。但是对于我的班级,我必须自己去培训他,这需要很长时间,并且很难让一个新项目成为新人。

0

使用已编译的查询。否则LINQ到SQL是很慢的。 Really

+0

我真的很感兴趣,为什么这已经downvoted。我们在生产中使用Linq-to-SQL,并且我们必须将大部分查询重写为已编译的查询,并且我们获得了大约10倍的性能提升。 – bh213 2009-02-08 13:04:39

0

我们使用我们的手工制作的领域模型,以及生成的类,再加上一个简单的实用工具,利用反射在需要时在它们之间进行转换。我们已经考虑编写一个转换器生成器,如果我们达到反射会造成性能瓶颈的地步。

+0

我也考虑过这一点,但走了杰夫弗里茨提到的路线。不需要反射! – Vyrotek 2008-10-28 01:17:05

4

LinqToSql为您的表生成一组部分类。您可以将接口定义添加到实现您的域模型的这些部分类的“另一半”中。然后,如果使用存储库模式来包装对Linq查询的访问,以便它们返回对象的接口实现(基础Linq对象),那么LinqToSql将变得非常灵活。

+0

我准备发布这个。很高兴听到别人用这种方式。 – Vyrotek 2008-10-28 01:15:54