【问题标题】:Mocked datacontext and foreign keys/navigation properties模拟数据上下文和外键/导航属性
【发布时间】:2012-01-26 12:28:25
【问题描述】:

我有一个问题,我无法找到解决方案,不知道是否有人可以提供一些建议。

我有一个模拟的数据上下文/对象集,通过接口和 t4 模板完成,具有一些 ninject 魔术,目的是在内存中存储数据集以进行单元测试。

但是,您应该如何处理外键值/导航属性?

假设我有酒店和客户,ctx.Hotels 有一些值,但 Customer.Hotels 没有。如果是一对一的关系,get 是这样的:

return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Hotel>("HotelModel.FK_Customers_Hotels", "Hotel").Value;

和一对多:

return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<BookingRow>("HotelModel.FK_BookingRows_Customers", "BookingRow");

我的技能水平甚至不足以理解这里发生了什么。

[编辑:] 大师朱莉·勒曼证实这是一条死胡同。你不能正确地模拟实体对象,你需要 POCOs。

【问题讨论】:

    标签: entity-framework mocking


    【解决方案1】:

    当你使用基于EntityObject 的实体时,模拟ObjectContext 几乎是不可能的,因为例如RelationshipManager 是一个不能用你的模拟替换的真实类。此外,您的实体严重依赖不可模拟的 EF 代码。

    注意:“大部分”是因为您可以模拟它,但您需要特殊的框架来拦截对真实对象的调用并将它们转发给您的方法。这只有使用 TypeMock Isolator 或 MS Moles 才能实现。

    顺便说一句。模拟 EF 代码是您不想做的事情 - 浏览 this answer 和链接的答案。其中一些针对较新的 EF API,但问题仍然相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多