Entity Framework 接口不起作用 - 处理相同问题的最佳方法是什么?

Entity Framework with interfaces does not work - what the best way to handle the same?

我正在使用 Entity Framework 并希望将 TPH 与接口一起使用。所以我创建了一个接口 "ICustomer",它映射到 "SimpleCustomer" 和 "DiscountedCustomer" class,如下所示。下面是模型构建器代码。据我了解,我们不能使用 Entity Framework 的接口,那么最好的方法是什么?

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

我的应用程序使用整个 UI 的接口,并希望顺利地进行类型转换到 Entity Framework。那么最好的方法是什么?

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

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

我的建议是,如果你想使用接口并保持层次结构,并且还想要平滑的类型转换,考虑使用 automapper 和抽象 类。这样您的 UI 仍将使用接口,但可以使用自动映射器配置文件映射到域模型。至少在接口支持到来之前。如果应用程序很大并且有数百个领域模型,这将不是一个快速的过程,因此需要明智地规划它。

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