在每个重用映射中映射具有相同表的多个Linq数据模型

时间:2010-08-05 03:54:10

标签: linq-to-sql orm mapping reusability

我在当前服务层的数据访问层实现了存储库模式。

我们有一个对象模型,其中相同的类“历史记录”映射在多个对象上(目前为6但很快就会更多!)

使用linq to sql的部分最佳实践不是为db中的每个表都有一个dbml文件,而是将其分解,这样它在上下文时不会产生巨大的性能损失已创建。

不幸的是,分隔对象的逻辑位置会在5个不同的DBML文件中留下历史记录。当linq生成器创建类时,它会在不同的名称空间中生成不同的类。

我在域模型中有一个历史记录对象,但我不希望每次使用历史记录时都将域对象模型重新映射到数据模型中。

我不想做的一件事就是将数据“读取”到多个查询中。

有没有办法可以将历史记录映射到多个数据模型,但只能写一次映射?

由于

皮特

解决方案

感谢您的帮助,我想我将回到所有数据表的一个数据上下文。

设置多个模型所涉及的工作不值得代码的额外复杂性和潜在的脆弱性。必须编写相同的左手,右手代码来映射历史记录是太多的工作和太多的地方,以保持代码同步。

感谢大家的输入

2 个答案:

答案 0 :(得分:1)

  

使用的部分最佳做法   linq to sql没有一个dbml   db中每个表的文件,但是   而是以这种方式将其分解   没有巨大的性能影响   在创建上下文时。

你在哪里听到的?我不同意。无论表的数量如何,DataContext通常都是一个相当轻量级的对象。

请参阅此处,了解涉及多个数据上下文的问题:

LINQ to SQL:单一数据上下文还是多数据上下文?
http://craftycodeblog.com/2010/07/19/linq-to-sql-single-data-context-or-multiple/

在我看来,每个数据库应该有一个datacontext。这也可以解决你的映射问题。

另见LINQ to SQL: Multiple / Single .dbml per project?

答案 1 :(得分:0)

一个选项可能是将历史记录放在他们自己的datacontext中,并将此对象与模型其余部分之间的关​​系保持为“ids”(因此只是db中的外键)。无论如何我就是这样做的。