【问题标题】:Multiple Linq data models with the same table being mapped in each Re-use mapping在每个重用映射中映射同一个表的多个 Linq 数据模型
【发布时间】:2010-08-07 00:55:43
【问题描述】:

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

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

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

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

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

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

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

谢谢

皮特

解决方案

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

设置多个模型所涉及的变通方法不值得代码的额外复杂性和潜在脆弱性。必须编写相同的左手、右手代码来映射历史笔记,工作量太大,而且要保持代码同步的地方太多。

谢谢大家的意见

【问题讨论】:

    标签: linq-to-sql orm mapping reusability


    【解决方案1】:

    部分使用最佳实践 linq to sql 是没有一个 dbml 数据库中每个表的文件,但是 而不是分解它,这样它 没有巨大的性能影响 上下文创建时。

    你从哪里听到的?我不同意。 DataContext 通常是一个相当轻量级的对象,与表的数量无关。

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

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

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

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

    【讨论】:

    • 我在各种博客上都读到过,我唯一还有链接的就是这个sidarok.com/web/blog/content/2008/05/02/…
    • 感谢您的链接和您的回答 Robert 我现在正在查看它们。
    • 嗨,彼得。我查看了您链接的博客条目,除了关于多数据上下文的部分外,我同意所有内容。数据上下文代表单个工作单元。该角色属于您的存储库对象,而不是 DBML。
    • 通过拆分 DBML(以毫秒而不是秒为单位),您可能会获得微小的性能提升,但额外的麻烦是不值得的,IMO。
    • @Robert Harvey:我不同意你关于工作单元的说法。存储库是“实体”集合的抽象,而工作单元是关于您在(可能是多个)存储库上执行的操作,作为“业务事务”的一部分。然后,DataContext 非常适合 UoW,您可以在操作开始时对其进行实例化,保存更改并在操作完成后处理。
    【解决方案2】:

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

    【讨论】:

    • 这也是我想到的解决方法,但是这将迫使我编写加载主要对象的代码,然后对笔记进行第二次加载,这将迫使失去说加载的能力让 linq 为我完成所有这些工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2023-03-21
    • 2013-03-31
    相关资源
    最近更新 更多