带接口的实体框架不起作用 - 处理相同的最佳方法是什么?

时间:2015-04-07 02:20:39

标签: entity-framework entity-framework-4 entity-framework-4.1

我正在使用Entity Framework,并希望将TPH用于接口。所以我创建了一个界面," ICustomer",它映射到" SimpleCustomer"和#34; DiscountedCustomer"课程如下图所示。下面是模型构建器代码。根据我的理解,我们不能使用与实体框架的接口,那么最好的方法是什么?

 modelBuilder.Entity<ICustomer>().ToTable("tblCustomer")
.Map<SimpleCustomer>(x => x.Requires("CustomerType").HasValue("S"))
.Map<DiscountedCustomer>(x => x.Requires("CustomerType").HasValue("D"));

我的应用程序在整个UI中使用接口,并希望为Entity Framework提供流畅的类型转换。那么最好的方法是什么?

1 个答案:

答案 0 :(得分:9)

实体框架不支持带接口的TPH(很抱歉说明显而易见)。这可能不是您正在寻找的解决方案,但我仍然会把它放在那里,因为它似乎是截至2015年4月16日的唯一解决方案。

在Entity Framework 6中,您最接近的是 - 使用抽象类而不是接口。这个 article 详细讨论了EF中的TPH 。

我的建议是,如果你想使用接口并维护层次结构,并且仍然想要流畅的类型转换,考虑将automapper与抽象类一起使用。这样你的UI仍将使用接口,但可以使用automapper配置文件映射到域模型。至少接口支持到达。如果应用程序很大并且有数百个域模型,那么它不会很快,因此需要明智地进行规划。

如果从头开始创建它,您可以简单地使用从UI层到DAL的抽象类,而无需重新分解。