Linq to sql 多个Linq数据模型,在每个重用映射中映射相同的表

Linq to sql 多个Linq数据模型,在每个重用映射中映射相同的表,linq-to-sql,orm,mapping,reusability,Linq To Sql,Orm,Mapping,Reusability,我已经在当前服务层的数据访问层上实现了存储库模式 我们有一个对象模型,其中同一类“历史笔记”映射到多个对象上(目前为6个,但很快会更多!) 使用linq to sql的部分最佳实践不是为数据库中的每个表都有一个dbml文件,而是将其分解,这样在创建上下文时不会对性能造成太大的影响 不幸的是,分隔对象的逻辑位置将历史注释保留在5个不同的DBML文件中。当linq生成器创建类时,它会在不同的命名空间中生成不同的类 我在域模型中有一个历史注释对象,但我不想每次使用历史注释时都将域对象模型重新映射到数据

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

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

使用linq to sql的部分最佳实践不是为数据库中的每个表都有一个dbml文件,而是将其分解,这样在创建上下文时不会对性能造成太大的影响

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

我在域模型中有一个历史注释对象,但我不想每次使用历史注释时都将域对象模型重新映射到数据模型中

我不想做的一件事是将数据的“读取”分解为多个查询

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

谢谢

皮特

解决方案

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

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

谢谢大家的意见

使用的部分最佳实践 linq到sql的区别在于没有一个dbml 数据库中每个表的文件,但 相反,要分解它,就这样 没有巨大的性能冲击 当上下文被创建时

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

有关涉及多个数据上下文的问题的分析,请参见此处:

LINQ到SQL:单个数据上下文还是多个数据上下文?

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

另见

使用的部分最佳实践 linq到sql的区别在于没有一个dbml 数据库中每个表的文件,但 相反,要分解它,就这样 没有巨大的性能冲击 当上下文被创建时

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

有关涉及多个数据上下文的问题的分析,请参见此处:

LINQ到SQL:单个数据上下文还是多个数据上下文?

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


另请参见

一个选项可以是将历史注释放在它们自己的数据上下文中,并将此对象与模型其余部分之间的关系保持为“id”(因此只保留数据库中的外键)。无论如何,我都会这样做。

一个选项是将历史注释放在它们自己的数据上下文中,并将此对象与模型其余部分之间的关系保留为“id”(因此只保留数据库中的外键)。不管怎样,我都会这样做。

我在各种博客上读到它,我唯一还有一个链接的就是这一个。谢谢你的链接和你的答案,罗伯特,我现在正在浏览。嗨,彼得。我看了你链接的博客条目,我完全同意,除了关于多数据上下文的部分。数据上下文并不表示单个工作单元。这个角色属于您的存储库对象,而不是DBML。拆分DBML(以毫秒为单位,而不是以秒为单位)可能会获得微小的性能改进,但我认为,额外的麻烦不值得这么做。@Robert Harvey:我不同意您关于工作单元的说法。存储库是一个“实体”集合的抽象,而工作单元是关于您作为“业务事务”的一部分在(可能是多个)存储库上执行的操作。DataContext自然适合UoW,您可以在操作开始时实例化它,并在操作完成后保存更改和处置。我在各种博客中阅读了它,唯一一个我仍然有链接的是这一个。感谢链接和您的回答Robert,我正在查看它们。嗨,Peter。我看了你链接的博客条目,我完全同意,除了关于多数据上下文的部分。数据上下文并不表示单个工作单元。这个角色属于您的存储库对象,而不是DBML。拆分DBML(以毫秒为单位,而不是以秒为单位)可能会获得微小的性能改进,但我认为,额外的麻烦不值得这么做。@Robert Harvey:我不同意您关于工作单元的说法。存储库是一个“实体”集合的抽象,而工作单元是关于您作为“业务事务”的一部分在(可能是多个)存储库上执行的操作。DataContext自然适合UoW,您可以在操作开始时实例化它,并在操作完成时保存更改和处置。这也是我想到的解决方法,但这会迫使我编写加载主对象的代码,然后对笔记进行第二次加载,这将迫使我丧失说加载的能力,并让linq为我完成所有这些工作。这也是我想到的工作,但这将迫使我编写加载主对象的代码,然后对笔记进行第二次加载,这将迫使我丧失说加载的能力,并让linq为我完成所有这些工作。