EF导航属性会自动从已查出来的对象附加

如果新增对象导航属性对应的Id有值,其相应的导航属性会自动在内存中查找,如果存在会自动附加上去。

public virtual void UpdateMaterialPurchaseOrderItem(
            ChangeDtos<MaterialPurchaseOrderItemDetailInputDto> itemDetail, Guid billId)
        {
            Ensure.NotNull(itemDetail, nameof(itemDetail));
            var materialPurchaseOrder = GetEntityById(billId);
            _materialPurchaseOrderItemInputUnitService.SaveChangeDtos(itemDetail, materialPurchaseOrder.OrderItemDetail);
            materialPurchaseOrder.OrderItemDetail.Where(a => a.Material == null).ForEach(a =>
                {
                    a.Material = _materialRepository.First(a.MaterialId);
                });
            RepositoryContext.Commit();
        }

SaveChangeDtos封装了新增修改删除的方法在里面。

如果非新增数据中OrderItemDetail.MaterialId与新增数据中的MaterialId相同,则EF会自动将Material赋值。

给a.Material赋值的循环,只有当OrderItemDetail集合中(非新增数据)不存在对应的MaterialId时才会进入循环

原文地址:https://www.cnblogs.com/Cyril-hcj/p/11910002.html

时间: 2024-10-06 17:21:27

EF导航属性会自动从已查出来的对象附加的相关文章

EF导航属性

其实有个小问题困扰了我好久,在年前一个项目的时候 当我使用EF向数据库添加一条数据并SaveChanges()之后,立即根据主键再查询出这条数据的时候,发现所有的导航属性竟然都没有值. 直接上测试项目,我们要创建两个对象,分别是Users和Orders,Users和Order的关系是一对多的关系.先补充一个小知识(我非常小白)_codeFitst.Orders.Add(order);如果order主键是自动增加的,当_codeFitst.SaveChanges();执行之后,order对象中的i

ef 更新导航属性

总之,要让所有的东西,都被DbContext管理状态 1.查出来,改了,再提交 2.new 出来,attach,再改,再提交 以上两种都较好理解 3.new出来,改了,再attach,在改状态,再提交 改状态这里,不是和普通属性一样Property(x=>x.?).IsModify=true,导航属性不能用这样的方式 因为导航属性对应的是一个集合,而状态是要对应到集合里的每个元素具体的状态,而不是集合整个的状态 ((IObjectContextAdapter)db).ObjectContext.

EFCode First 导航属性

EF外键 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /*

MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式

通过上一篇的学习 我们把demo的各种关系终于搭建里起来 以及处理好了如何映射到数据库等问题 但是 只是搭建好了关系 问题还远没有解决 这篇就来写如何查找导航属性 和查找导航属性的几种方式 已经跟踪生成的SQL来检测是否满意 通过这节学习 来明白什么时候用哪个~~ 一.三种加载 1.延迟加载 这是原文中的图 大家可以去看下  我模仿上面的做了个测试  出现了  已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭. 我的解决办法是    var departments

EF的导航属性

在EF中,外键被称为导航属性. 在EF core中,查询的时候默认是只查自身而不会去查询外键表的.如果想要让查询结果包含外键实体,则需要使用include方法来让查询结果包含外键实体.如 db.StudentDetails.Include(o=>o.Student).Where(s => s.u_SID == 1).FirstOrDefault().Student.Name; 生成sql语句时,使用Include在sql中内连接inner jion来查询,也就可以查询到外键表Student.

关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明

一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载),Explicit Loading(显式加载),其中Lazy Loading和Explicit Loading都是延迟加载. (注:由于Entity Framework版本的不同,以及采用不同的模式(DB First,Model First,Code First)来构建的Entity,最终导致可能自

EF Code First 导航属性 与外键

一对多关系 项目中最常用到的就是一对多关系了.Code First对一对多关系也有着很好的支持.很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性.导航属性等检测到模型之间的关系,自动为我们生成外键.观察下面的类: public class Destination { public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; s

EF架构~过滤导航属性等,拼接SQL字符串

拼接T-SQL串,并使它具有通用性 好处:与服务器建立一次连接,给服务器发一条SQL命令,即可实现 代码如下: 1 /// <summary> 2 /// 构建Insert语句串 3 /// 主键为自增时,如果主键值为0,我们将主键插入到SQL串中 4 /// </summary> 5 /// <typeparam name="TEntity"></typeparam> 6 /// <param name="entity&

CodeFirst EF中导航属性的个人理解

>导航属性: 01.个人理解就是Ef中的属性在实体数据表中不存在(先这么认为); 02.就是除了根据表中列映射出的属性 之外根据表与表之间的关系的关联属性.方便操作与之关联的表; 例如: 有 表A 表B 的关系是1对多,根据A,B表创建A类和B类 那么在A类中除了根据表中列映射出的属性,还要根据表之间的关联关系创建一个B类型的ICollection<>集合属性,就叫做导航属性 而B类除了根据B表中的列创建的属性,还要创建一个A类型的导航属性, 说白了就是根据主键表创建的类 必须创建一个根