簡體   English   中英

實體框架可選外鍵在從屬中創建冗余FK字段

[英]Entity Framework optional foreign key creating redundant FK field in dependant

我正在嘗試使用此模型在User和TeamMember之間建立0-1關系

public class User
    {
        [Key]
        public Guid Id { get; set; }

        public Guid? TeamMemberId { get; set; }

        public virtual TeamMember TeamMember { get; set; }
    }

    public partial class TeamMember
    {


        [Key]
        [Column(Order = 0)]
        public Guid TeamId { get; set; }

        [Key]
        [Column(Order = 1)]
        public Guid UserId { get; set; }

        public virtual MSUCTeam Team { get; set; }

        public virtual User User { get; set; }

    }

    public class Team
    {
        [Key]
        public Guid Id { get; set; }

        public virtual ICollection<TeamMember> TeamMembers { get; set; }
    }

為了告訴EF有關關系的所有信息,我使用了如下的Fluent API

            modelBuilder.Entity<Team>()
            .HasMany(e => e.TeamMembers)
            .WithRequired(e => e.Team)
            .HasForeignKey(e => e.TeamId).WillCascadeOnDelete();

             modelBuilder.Entity<User>()
            .HasOptional(e => e.TeamMember)
            .WithRequired(e => e.User);

表本身是在上下文中定義的

        public virtual DbSet<Team> Teams { get; set; }

        public virtual DbSet<TeamMembers> TeamMembers { get; set; }

這將在數​​據庫中生成所需的表,但是TeamMembers表具有3列:

1)TeamId(Guid,不可為空):PK和FK鏈接到Team.Id。 2)UserId(Guid,不可為空):PK。 3)User_Id(Guid,不可為空):FK鏈接到User.Id

如何使UserId列成為鏈接到User表的PK和FK? 沒有UserId和TeamId都不會出現TeamMember條目,但是我必須告訴EF我想要它做什么。

我真的無法測試,但嘗試設置外鍵注釋

public partial class TeamMember
{
    [Key]
    [Column(Order = 0)]
    public Guid TeamId { get; set; }

    [Key]
    [Column(Order = 1)]
    public Guid UserId { get; set; }

    [ForeignKey("TeamId")]
    public virtual MSUCTeam Team { get; set; }

    [ForeignKey("UserId")]
    public virtual User User { get; set; }

}

用這個:

public class User
{
    [Key]
    public Guid Id { get; set; }

    public virtual TeamMember TeamMember { get; set; }
}

public partial class TeamMember
{
    [Key, ForeignKey("User")]
    public Guid Id{ get; set; }

    public virtual User User { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)  
{  
    modelBuilder.Entity<TeamMember>()
                .HasRequired(p => p.User)
                .WithOptional(p => p.TeamMember);
} 

有關拆分表的更多信息,請單擊此鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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