zoukankan      html  css  js  c++  java
  • 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对象.(语言表达很绕口)

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

  • 相关阅读:
    c# gdi设置画刷透明
    char,varchar,nvarchar,text区别与联系
    banner无缝轮播【小封装】
    div中的内容垂直居中的五种方法
    jQuery hover() 方法
    年过三十,我为什么要学习ios 与安卓App 移动端技术
    CentOS 中用 Split 命令分割文件的方法
    centos E440 安装无线网卡
    CentOS7修改默认运行级别
    iwconfig: command not found 解决方案
  • 原文地址:https://www.cnblogs.com/lxiang/p/2480767.html
Copyright © 2011-2022 走看看