背景: 尝试使用Entity Framework为项目创建模拟数据。
我想我需要返回关闭的对象图(除非有更好的方法):
有3个类都来自EntityBase,即
class TA : EntityBase
class TB : EntityBase
class TC : EntityBase
TA有两个虚拟属性:
public virtual TB B { get; set; }
public virtual ICollection<TC> C { get; set; }
TB已经
public virtual ICollection<TA> A { get; set; }
TC已
public virtual TA A { get; set; }
在某些地方,我需要TA或TB或TC的实例化对象。
一旦我完全手工制作要返回的TA实例,并且手动填充B和C的所有属性,而不是使用相同功能的3个副本来返回A或B或C,是否有办法拥有实例化A实例的方法的一个副本,但也返回B或C.
喜欢的东西
Get<A>()
,或Get<B>()
或Get<C>()
当然,如果有更简单的模拟实体的标准方法,则可能不需要这些。
答案 0 :(得分:1)
你可能最好只创建三种方法。
要使用一种方法执行此操作,您需要返回类型为EntityBase
的对象,因为它们都继承了该对象。
public EntityBase MyMethod() {
//return TA or TB or TC
}
但是,您可能还有其他类型从EntityBase
继承,因此在技术上可以返回其他类型。
如果你需要阻止它,你可以创建一个继承自EntityBase
的另一种类型,然后让你的三个类(只有那三个类)从中继承。
class MyEntityBase : EntityBase
class TA : MyEntityBase
class TB : MyEntityBase
class TC : MyEntityBase
public MyEntityBase MyMethod() {
//return TA or TB or TC
}
但无论您是否这样做,您仍应确认返回哪种类型并采取相应行动。
var result = MyMethod()
if (result is TA myTA) {
//do something with myTA
}
当然,你可以放弃所有的测试,并假设你得到了正确的价值,这很可能会起作用.....但它要求在未来打破一些东西:)