【问题标题】:Two different queries to different object, same result对不同对象的两个不同查询,相同的结果
【发布时间】:2013-05-23 08:07:17
【问题描述】:

我使用的是 UoW,所以我认为问题在于这两个查询具有相同的上下文。

例如,如果我这样做:

IEnumerable listProjects = ((IQueryableUnitOfWork)UnitOfWork)
.CreateSet<Project>().Include(p=>p.Users).AsEnumerable();

然后我做:

IEnumerable listProjectsWithoutIncludes = ((IQueryableUnitOfWork)UnitOfWork)
.CreateSet<Project>().AsEnumerable();

在对象 listProjectsWithoutIncludes 中存储了项目的用户,就像我使用包含进行查询一样。

有人知道如何防止这种情况吗?谢谢。

【问题讨论】:

  • 如果它是同一个工作单元,那么它按预期工作。如果您希望它们被隔离,那么您会使用不同的工作单元吗? UoW 的整个概念是您将动作组合在一起以形成一个工作单元。如果它们是不能交互的单独项目,那么它们不是工作单元的一部分吗?
  • 感谢 Belogix,我不知道工作单元是这样工作的。

标签: c# linq include instance unit-of-work


【解决方案1】:

根据我的评论...Unit Of Work 本质上将所有内容组合为一个包或事务。在您的示例中,如果您希望将操作保持隔离且彼此不了解,那么您将需要两个不同的工作单元。

将一个工作单元视为一次交易,因此如果您有 5 块石头并拿走 2 块,那么此后在 那个 交易期间您每次都会有 3 块。但是,如果您有不同的工作单元,它总是会看到 5 个石头(直到提交等),因为它不是第一次交易的一部分。

我希望这是有道理的?工作单元 = 事务 = 工作组。如果在一个事务中一起执行这些操作没有意义,则创建一个新的工作单元,依此类推。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多