![](/img/trans.png)
[英]How to expose Foreign Key property to existing entity having navigational property using EF6 Code First
[英]EF Code First - How to add foreign key property when using InverseProperty?
我在下面定义了代码优先模型。
Project和TeamMember之间存在两种关系:
一对多-项目始终只有一个TeamMember作为经理。
public class Project { public Guid ProjectId { get; set; } [InverseProperty("ManagedProjects"), Required] public virtual TeamMember Manager { get; set; } // 2 public virtual List<TeamMember> TeamMembers { get; set; } // 1 } public class TeamMember { public Guid TeamMemberId { get; set; } public virtual List<Project> Projects { get; set; } // 1 [InverseProperty("Manager")] public virtual List<Project> ManagedProjects { get; set; } // 2 }
此模型生成如下所示的“项目”表定义。
CREATE TABLE [dbo].[Project] (
[ProjectId] UNIQUEIDENTIFIER NOT NULL,
[Manager_TeamMemberId] UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT [PK_dbo.Project] PRIMARY KEY CLUSTERED ([ProjectId] ASC),
CONSTRAINT [FK_dbo.Project_dbo.TeamMember_Manager_TeamMemberId] FOREIGN KEY
([Manager_TeamMemberId]) REFERENCES [dbo].[TeamMember] ([TeamMemberId]));
我需要使用Manager的外键属性来扩展Project,但无法确定要执行此操作。
public Guid ManagerId { get; set; } // 2
[InverseProperty("ManagedProjects")]
public virtual TeamMember Manager { get; set; } // 2
上面的代码不起作用,因为它只是在Project表中生成一个ManagerId字段。 我尝试了ForeignKey和InverseProperty的不同组合,但没有任何运气。
有什么建议么?
接下来的代码应为多对多创建连接表,并且“ Project”表将在此表上具有外键。
public class Project
{
public Guid ProjectId { get; set; }
public virtual TeamMember Manager { get; set; } // 2
[InverseProperty("Projects")]
public virtual List<TeamMember> TeamMembers { get; set; } // 1
}
public class TeamMember
{
public Guid TeamMemberId { get; set; }
[InverseProperty("TeamMembers")]
public virtual List<Project> Projects { get; set; } // 1
[InverseProperty("Manager")]
public virtual List<Project> ManagedProjects { get; set; } // 2
}
我认为没有连接表就不可能有多对多的关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.