具有接口的实体框架不起作用 - 处理相同的最佳方法是啥?
Posted
技术标签:
【中文标题】具有接口的实体框架不起作用 - 处理相同的最佳方法是啥?【英文标题】:Entity Framework with interfaces does not work - what the best way to handle the same?具有接口的实体框架不起作用 - 处理相同的最佳方法是什么? 【发布时间】:2015-06-11 12:32:49 【问题描述】:我正在使用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"));
我的应用程序在整个 UI 中都使用了接口,并且希望能够顺利地将类型转换为实体框架。那么最好的方法是什么?
【问题讨论】:
【参考方案1】:Entity Framework 不支持带有接口的 TPH(很抱歉说的很明显)。这可能不是您正在寻找的解决方案,但我仍会将其放在那里,因为它似乎是截至 2015 年 4 月 16 日的唯一解决方案。
在 Entity Framework 6 中,最接近的是 - 使用抽象类而不是接口。article 非常详细地讨论了 EF 中的 TPH。
我的建议是,如果您想使用接口并保持层次结构,并且还想要平滑的类型转换,考虑将automapper 与抽象类一起使用。这样您的 UI 仍将使用接口,但可以使用自动映射器配置文件映射到域模型。至少在接口支持到来之前。如果应用程序很大并且有数百个领域模型,这将不会很快,因此需要明智地进行规划。
如果您从头开始创建它,您可以简单地使用从 UI 层到 DAL 的抽象类,而无需任何重构。
【讨论】:
以上是关于具有接口的实体框架不起作用 - 处理相同的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章