【问题标题】:Entity Framework Code First- Two nullable and one non-null foreign keys from same table实体框架代码优先 - 来自同一个表的两个可空外键和一个非空外键
【发布时间】:2017-03-16 08:01:55
【问题描述】:

如何在这两个表和列之间为这个问题设置正确的结构? 谢谢。

任务表:

public int EntryUserId{get;set;}
public virtual Users EntryUser{get;set;}

public int? AssignToUserId{get;set;}
public virtual Users AssignToUser{get;set;}

public int? CheckerUserId{get;set;}
public virtual Users CheckerUser{get;set;}

用户表:

public virtual IEnumerable<Tasks> EntryUser
public virtual ICollection<Tasks> AssignToUser
public virtual ICollection<Tasks> CheckerUser

在我的 DbContext 类中:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Tasks>()
                .HasRequired(m => m.EntrybyUser)
                .WithMany(t => t.EntryUser)
                .HasForeignKey(m => m.EntryUserId)
                .WillCascadeOnDelete(true);

    modelBuilder.Entity<Tasks>()
                .HasRequired(m => m.AssignToUser)
                .WithMany(t => t.AssignToUser)
                .HasForeignKey(m => m.AssignToUserId)
                .WillCascadeOnDelete(true);//for nullable

    modelBuilder.Entity<Tasks>()
                .HasRequired(m => m.CheckerUser)
                .WithMany(t => t.CheckerUser)
                .HasForeignKey(m => m.CheckerUserId)
                .WillCascadeOnDelete(true);//for nullable
    base.OnModelCreating(modelBuilder);

}

【问题讨论】:

    标签: entity-framework ef-code-first foreign-keys nullable entity-framework-migrations


    【解决方案1】:

    改成:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Tasks>()
                        .HasRequired(m => m.EntryUser)
                        .WithMany(m=> m.EntryUser)
                        .HasForeignKey(m => m.EntryUserId)
                        .WillCascadeOnDelete(true);
    
            modelBuilder.Entity<Tasks>()
                        .HasOptional(m => m.AssignToUser)
                        .WithMany(t => t.AssignToUser)
                        .HasForeignKey(m => m.AssignToUserId)
                        .WillCascadeOnDelete(true);//for nullable
    
            modelBuilder.Entity<Tasks>()
                        .HasOptional(m => m.CheckerUser)
                        .WithMany(t => t.CheckerUser)
                        .HasForeignKey(m => m.CheckerUserId)
                        .WillCascadeOnDelete(true);//for nullable
            base.OnModelCreating(modelBuilder);
    
        }
    

    和用户类:

    public class Users
    {
        public virtual ICollection<Tasks> EntryUser { get; set; }
        public virtual ICollection<Tasks> AssignToUser { get; set; }
        public virtual ICollection<Tasks> CheckerUser { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多