我有两个不同的应用程序共享同一个数据库的场景。对于这两个应用程序,我使用的是Code First EF 4.1。这两个应用程序也共享一个公共库。一切都很好,直到我开始添加特定于应用程序的继承。例如,假设我在共享库中有一个类
public class Customer
{
public CustomerOrder Order;
}
然后,在一个应用程序中,我继承CustomerOrder以添加应用程序所需的一些自定义功能。
public class EditableCustomerOrder: CustomerOrder
{
public void Edit() {};
}
在此应用程序中,我希望所有CustomerOrders都作为EditableCustomerOrders加载。但是,我找不到在映射中指定应忽略CustomerOrder并仅将EditableCustomerOrder映射到基础表的方法。
我试过这个
modelBuilder.Ignore<CustomerOrder>();
但是省略了Customer的Order属性,所以我无法使用它。我实现此功能的唯一方法是使用泛型,以便Customer为其CustomerOrder类型使用泛型,然后在应用程序中实现Customer以指定它使用EditableCustomerOrder。然而,这种解决方案可以很快地变得无法控制,随处可见泛型。
我正在尝试做什么?基本上我试图告诉实体,即使有基类型和扩展类型,我希望它只使用扩展类型。
答案 0 :(得分:0)
如果有任何绝望的人偶然发现了这一点,我想我会发布最终的解决方案。
我发现创建类似这样的场景的唯一方法是使用抽象类作为我在共享库中定义的基类,然后在每个应用程序中扩展该基类。从那以后,我可以为每个忽略扩展类上所有添加属性的应用程序编写DbContext
。有了所有这些,我就可以使用Entity
映射到不同应用程序中的不同实现到同一组基类。
我还想建议反对这个总体思路作为解决方案。我已经有几个月了。它很有效,但是很容易使用并且容易出错。为了摆脱这种情况,我将密封我的模型类,而是专注于每个应用程序的MVVM
解决方案。