C# 使用具有导航属性的接口
我正在尝试仅使用实体框架4、POCO和代码来设置项目 在实体框架中,导航属性的类型是否可以作为接口 我有一门“任务”课。任务可以分配给用户或组,每个用户或组由单独的类表示,并存储在单独的表中。这些类看起来像这样:C# 使用具有导航属性的接口,c#,.net,entity-framework,entity-framework-4,code-first,C#,.net,Entity Framework,Entity Framework 4,Code First,我正在尝试仅使用实体框架4、POCO和代码来设置项目 在实体框架中,导航属性的类型是否可以作为接口 我有一门“任务”课。任务可以分配给用户或组,每个用户或组由单独的类表示,并存储在单独的表中。这些类看起来像这样: public class User : IAssignable { public string Name { get; set; } public int ID { get; set; } public string Email { get; set; }
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找出映射。使用EF4支持的文本模板转换工具包(T4)可以节省大量工作。我花了整整12个小时寻找手动创建POCO和接口的方法后发现了这个
除了为单元测试提供出色的基础之外,它还根据模型中定义的关系自动生成导航属性 您可以使用导航属性中的界面,查看此解决方案,因为它与问题相同:
我知道这是一个老问题,但不是,Entity Framework(甚至最新版本6)没有允许您将导航属性映射为接口类型的功能 但是,您可以使用具体类型(以及只能设置一个约束)映射多个导航属性,并提供接口类型的未映射属性,该属性将具体导航属性合并为单个属性。不幸的是,这可能会使您的查询更加复杂,因为某些查询需要知道要引用哪些具体的导航属性(并且您不能查询未映射的接口属性) 多态导航属性的支持非常复杂。如果您假设它被映射到一个列,如“代码> AsgigNeToID INT/Cuth>”,那么考虑一下,为了查询原始代码< > Asgignto属性,将会发生什么。您必须联合或加入
User
和Group
实体集,并希望给定的AssignedToId
仅出现在其中一个实体集中。这是类型映射所使用的方法,但它只适用于类继承(而不是接口)和仔细规划跨参与类型生成不同ID