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

Shi*_*ala 14 entity-framework entity-framework-4 entity-framework-4.1

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

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

我的应用程序使用遍布UI的接口,并希望为Entity Framework提供平滑的类型转换.那么最好的方法是什么?

Bil*_*ani 9

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

在Entity Framework 6中,最接近的是 - 使用抽象类而不是接口.文章谈到了非常详细TPH在EF.

我的建议是,如果你想使用接口和保持分层,也还是要平稳的类型转换,可以考虑使用automapper抽象类.这样您的UI仍将使用接口,但可以使用automapper配置文件映射到域模型.至少接口支持到达.如果应用程序很大并且有数百个域模型,那么它不会很快,因此需要明智地进行规划.

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