分配ID后,Entity Framework导航属性为空

时间:2018-09-04 03:53:17

标签: c# entity-framework

我有以下

public class MainClass {
    public int Id  { get;set; }

    public virtual ICollection<SubClass> SubClasses { get;set; }
}

public class SubClass {
    public int MainClassId  { get;set; }

    public virtual MainClass MainClass { get;set; }
}

并且我有一对多的设置映射。我的问题是当我这样做时:

var subClass = new SubClass();
subClass.MainClassId = 1;
_dbset.SaveChanges(subClass);

//subClass.MainClass is null after save

只有我可以获取MainClass实体,我才需要调用id = 1的get函数。任何人都知道导致此问题的原因是什么?

3 个答案:

答案 0 :(得分:1)

您应将subClass添加到mainClass's的{​​{1}}集合中,然后保存更改。

就像

SubClasses

答案 1 :(得分:0)

以下将起作用:

public class MainClass {
    public int Id  { get;set; }

    public virtual  ICollection<SubClass> SubClasses { get;set; }
}

public class SubClass {
    public int Id  { get;set; }
    [ForeignKey("MainClass")]
    public int MainClassId  { get;set; }

    public virtual MainClass MainClass { get;set; }
}

答案 2 :(得分:0)

如果使用代码优先方法,则可能缺少1:M关系的modelbuilder。 在方法OnModelCreating中的上下文中,您需要具有以下内容。

modelBuilder.Entity<MainClass>()
      .HasMany(e => e.SubClass)
      .WithRequired(e => e.MainClass)
      .WillCascadeOnDelete();

我想到的下一件事情是,您可能想在get方法中使用include来指定您需要加载主类的所有子类

 context.MainClass.Include(x => x.SubClass).ToList();

或使用其他方法加载联接的数据。 Link

希望对您有所帮助。