LinqToSql 最佳实践

7

我刚开始使用LinqToSql创建我的数据访问层。大家都在谈论这种酷炫的语法,我也很喜欢Linq。

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

所以我看了看其他人如何使用LinqToSql,比如Rob Connery在他的StoreFront Demo中。

由于我不喜欢所有这些代码的生成方式,因此我手动创建了我的领域层,并使用生成的类作为参考。通过这种解决方案,我很满意,因为我可以使用Linq提供的功能(延迟执行、惰性加载等),而且我的领域层非常容易理解。

你们如何使用LinqToSql?

5个回答

6
创建的类并不像看起来那么复杂。当然,需要编写一些代码,但总体来说,为提供的功能而言,它尽可能地轻量级。
我曾经也创建自己的表格,但现在我只使用LINQtoSQL DataContext。为什么?创建更简单,功能更好,互通性好,甚至可能比我的东西更快(不是每个方面都是这样。通常,我自己的东西在某些方面非常快,但通用的东西在其他所有方面都更快)。 但最重要的是:更容易将新开发人员引入LINQ,而不是引入我的项目。有教程、示例代码、文档,我必须为我的代码自己创建这些内容。同样,使用我的东西与其他技术(如WCF或数据绑定)也会遇到许多问题。
我通过艰难的方式学会了不要将自己开发到一个死胡同里。开始时看起来很快、很容易,比学习和使用库更有趣,但几个月后就变成了痛苦,通常连我自己都是如此。
过了一段时间,我的自己创造数据容器的新奇感消失了,我注意到添加功能所带来的痛苦。如果我使用提供的类,我本来可以免费获得这些功能。
接下来,我不得不向其他程序员解释我的代码。如果我使用提供的类,我可以指向一些网站让他学习这些内容。但对于我的类,我必须亲自向他讲解,这需要很长时间,也很难让新人加入项目。

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

我正要发布这个。很高兴听到其他人也这样使用它。 - Vyrotek
我的团队使用类似的技术,使用强类型数据集,并将接口实现添加到Vs.Net生成的部分类中。 - Jeff Fritz
有没有关于这个的代码示例?我基本上使用依赖注入模型编写了我的域来模拟数据库。现在我正在创建我的LINQ到SQL数据库,并且正在努力找出如何有效地将我的业务对象x与我的linq对象x映射而不需要进行一些无聊的转换。 - Chris James

1

您可以手写自己的类,并使用LINQ to SQL属性声明映射,或者使用外部XML文件。

如果您想继续使用现有的设计师并只修改代码生成过程,请使用我的模板来定制生成的代码


0

使用编译查询。否则,Linq to SQL 速度非常慢。真的


我真的很想知道为什么这个被踩了。我们在生产中使用Linq-to-SQL,我们不得不将大部分查询重写为编译查询,并且我们从中获得了约10倍的性能提升。 - bh213

0
我们使用我们手工制作的领域模型,结合生成的类,再加上一个利用反射在需要时进行转换的简单实用程序。如果反射成为性能瓶颈,我们考虑编写转换器生成器。

我也考虑过这个,但最终选择了Jeff Fritz提到的方法。不需要反思! - Vyrotek

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