簡體   English   中英

EF代碼優先-使用InverseProperty時如何添加外鍵屬性?

[英]EF Code First - How to add foreign key property when using InverseProperty?

我在下面定義了代碼優先模型。

Project和TeamMember之間存在兩種關系:

  1. 多對多-TeamMember可以處理許多項目。 項目可以有許多TeamMembers。
  2. 一對多-項目始終只有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM