【发布时间】:2015-08-15 00:28:55
【问题描述】:
我有一个 db first edmx 模型。它生成的部分类具有非虚拟的简单属性。例如
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
public partial class Entity
{
public int Id {get;set;} //not virtual
public string SomeOtherProperty {get;set;} //also not virtual
public virtual ICollection<RelatedEntity> RelatedCollection {get;set;} //but 'navigational' properties are virtual.
}
如何告诉设计师让所有属性都虚拟化?
【问题讨论】:
-
可能,无论如何。导航属性被声明为虚拟以提供数据的延迟加载。原始属性始终在加载,因此它们始终是非虚拟的。
-
哦,太好了,我看到微软实际上并没有努力让测试变得简单。添加这个功能有多难?哦.. 亚历克斯..
-
我看到你不应该添加这个功能。 EF 测试是一种集成测试,而不是一个单元,因此您不需要模拟对象。
-
除非你正在做DDD 并且想要断言在你的实体上调用了方法,在这种情况下你希望你的模拟存储库返回一个模拟实体。然后你不能为你的实体的属性提供值。
-
据我了解,实体不是域对象,它们是没有任何逻辑的数据传输对象。您不能使它们的属性虚拟或只读或复杂计算。 EF 应该从原始实体构建您的域对象。
标签: c# entity-framework properties virtual