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对象.(语言表达很绕口)

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

  • 相关阅读:
    DIV高度设置全屏
    Yii2使用PHPExcel读取excel
    关于linux centos7 vmware 和windows7 文件共享笔记
    mysql rpm包安装
    linux crontab 计划任务脚本
    linux php5.6 安装
    linux上安装php phpredis扩展
    让微信小程序每次请求的时候不改变session_id的方法
    mysql主从配置
    mysql存储过程之游标遍历数据表
  • 原文地址:https://www.cnblogs.com/lxiang/p/2480767.html
Copyright © 2011-2022 走看看