entity-framework - 具有接口(interface)的 Entity Framework 不起作用 - 处理相同的最佳方法是什么?

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

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

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

我的应用程序在整个 UI 中都使用了接口(interface),并且希望对 Entity Framework 进行平滑的类型转换。那么最好的方法是什么?

最佳答案

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

在 Entity Framework 6 中,您可以获得的最接近的是 - 使用抽象类而不是接口(interface)。 这个 article 非常详细地讨论了EF中的TPH。

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

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

关于entity-framework - 具有接口(interface)的 Entity Framework 不起作用 - 处理相同的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482659/

相关文章:

c# - 获取特定 linq to sql 表的名称

validation - ASP.NET MVC 2 : Model Validation - username already taken?

c# - 使用 EF4 的循环引用

entity-framework-4 - Entity Framework 4 SaveChanges方法不保存到数据库

c# - Entity Framework - 多对多关系

c# - Entity Framework 代码首先,不是创建数据库

c# - Linq:如何使用表/列表作为参数优化请求?

c# - EntityFramework 包版本 ="6.1.3"和 Web 配置版本 6.0.0.0?

oracle - "TIMESTAMP WITH TIME ZONE"<--> DateTImeOffset 映射不会在 INSERT 命令上传递区域部分( Entity Framework + Oracle)

c# - EF 4.1 引用完整性错误