Entity Framework Codefirst 延迟加载的一个容易犯的小错误,让我纠结了整整一下午

一般在创建一对多或者多对多关系的时候都会有一个延迟加载的属性,如:

public virtual ICollection<Entity_Computer> Computers { get; set; }

而如果直接使用这个属性

var department = new Entity_Department() { DepartmentName = "test" };
department.Computers.Add(new Entity_Computer() { TID = 3, AddTime = DateTime.Now, Status = 1 });

 EF或报错“未将对象引用设置到对象的实例。”,因为Computers默认为NULL的原因

所以需要在构造函数内做一个初始化默认值的操作

 public Entity_Department()
 {
      Computers = new List<Entity_Computer>();
 }

 而我要说的不是“多”端的问题,是一对多的“一”端的问题,如:

public virtual Entity_Department Department { get; set; }

 因为“多”端,所以潜意识的我就也在构造函数中加了初始化默认对象

public Entity_Computer()
{
    Department = new Entity_Department();
}

 结果,让我纠结的问题就来了。

1、var department = context.Deparentments.Include("Computers").Where(d=>d.DID==6).FirstOrDefault();  这样获取的department.Computers.Count都等于0

2、每次删除一个department都会在库中增加n(n=department子对象数量)个空的department对象,并且会更改每一个子对象的父对象,依次关联新加的department对象.(语言表达很绕口)

可能还有其他的问题占时没有发现,因为项目时间紧,暂时没时间思考原理。

原文地址:https://www.cnblogs.com/lxiang/p/2480767.html