Using an Interface with a navigation property
我正在尝试使用EntityFramework4、Poco和仅代码来设置项目。
在实体框架中,导航属性的类型是否可能是接口?
我有一个"任务"课。任务可以分配给一个用户或一个组,每个用户或组由一个单独的类表示,并存储在单独的表中。这些类看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class User : IAssignable { public String Name { get; set; } public int ID { get; set; } public String Email { get; set; } public String Password { get; set; } } public class Group : IAssignable { public String Name { get; set; } public int ID { get; set; } public String Manager { get; set; } public String Department { get; set; } } public class Task { public String Title { get; set; } public DateTime DueDate { get; set; } public String Details { get; set; } public IAssignable AssignedTo { get; set; } } |
在实体框架中,是否有一种方法可以将assignedto属性作为导航属性?我假设ef必须有某种类型的鉴别器才能知道它是否需要在users表或groups表中查找,但是我可以使用code only或edmx来确定映射。
我知道这是一个老问题,但不,实体框架(甚至最新版本6)没有允许您将导航属性映射为接口类型的功能。
但是,您可以将多个导航属性映射为具体的类型(以及只能设置一个的约束),并提供接口类型的未映射属性,该属性将具体的导航属性合并为单个属性。不幸的是,这可能会使您的查询更加复杂,因为某些查询需要知道要引用哪些具体的导航属性(并且不能对未映射的接口属性进行查询)。
对于多态导航属性的支持有着显著的复杂性。考虑如果假设原始
您可以在导航属性中使用Interface,查看此解决方案,因为它与问题相同:如何将接口属性与codeFirst一起使用
通过使用EF4支持的文本模板转换工具包(T4),您可以节省大量的工作。我花了12个小时寻找一种方法来手动创建我的Poco和界面,终于找到了这个方法。
http://blogofrab.blogspot.com/2010/08/maintenance-free-mocking-for-unit.html
除了为单元测试提供出色的基础之外,它还根据模型中定义的关系自动生成导航属性。