Entity Framework 6 - 如何添加子实体?
Entity Framework 6 - How to Add Child Entities?
在 EF6 中添加子实体的正确方法是什么?为什么 Parent.Children.Add(child) 会抛出 NullReferenceException(Children 集合为 null)?如果 Parent.Children 集合至少有一项,则 .Add(child) 有效。我究竟做错了什么?这是我在 MVC 项目中的代码示例:
public class Parent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
public string Name { get; set; }
public int ParentID { get; set; }
public Parent Parent { get; set; }
}
public class AppContext : DbContext
{
public AppContext() : base("AppContext") {}
public DbSet<Parent> Parent { get; set; }
public DbSet<Child> Children { get; set; }
}
public class AppContextInitializer : System.Data.Entity.DropCreateDatabaseAlways<AppContext>
{
protected override void Seed(AppContext context)
{
Parent parent = new Parent { Name = "John" };
Child child = new Child() { Name = "Mary" };
parent.Children.Add(child); // Doesn't work: System.NullReferenceException, Children==null
Parent parent2 = new Parent { Name = "Robert" };
Child child2 = new Child { Name = "Sarah", Parent=parent2 };
context.Children.Add(child2); // Works.... even inserts the parent entity thru the child entity!!
context.SaveChanges();
}
}
您需要在 Parent
的构造函数中初始化 Children
导航 属性:
public class Parent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Child> Children { get; set; }
public Parent()
{
Children=new List<Child>();
}
}
在 EF6 中添加子实体的正确方法是什么?为什么 Parent.Children.Add(child) 会抛出 NullReferenceException(Children 集合为 null)?如果 Parent.Children 集合至少有一项,则 .Add(child) 有效。我究竟做错了什么?这是我在 MVC 项目中的代码示例:
public class Parent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public int ID { get; set; }
public string Name { get; set; }
public int ParentID { get; set; }
public Parent Parent { get; set; }
}
public class AppContext : DbContext
{
public AppContext() : base("AppContext") {}
public DbSet<Parent> Parent { get; set; }
public DbSet<Child> Children { get; set; }
}
public class AppContextInitializer : System.Data.Entity.DropCreateDatabaseAlways<AppContext>
{
protected override void Seed(AppContext context)
{
Parent parent = new Parent { Name = "John" };
Child child = new Child() { Name = "Mary" };
parent.Children.Add(child); // Doesn't work: System.NullReferenceException, Children==null
Parent parent2 = new Parent { Name = "Robert" };
Child child2 = new Child { Name = "Sarah", Parent=parent2 };
context.Children.Add(child2); // Works.... even inserts the parent entity thru the child entity!!
context.SaveChanges();
}
}
您需要在 Parent
的构造函数中初始化 Children
导航 属性:
public class Parent
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Child> Children { get; set; }
public Parent()
{
Children=new List<Child>();
}
}