Attach 的坑

Model Filed Database Value Console Value
User Phone +123000000000 +12333333333
User Email null eeeeeee
User Id 1 1
dbcontext.Users.Add(new User()
{
UserName = "test1",
CreatedAt = DateTime.Now
Phone = "+1230000000"
});
dbcontext.SaveChanges(); var user = new User()
{
Id = 1,
Phone = "+12333333333",
Email = "eeeeeeee"
};
dbcontext.Users.Attach(user);
//上面语句会抛异常,原因是dbcontext 已经跟踪了一个相同Id的实体,所以使用Attach注意当前的上下文
var user = new User()
{
Id = 1,
Phone = "+12333333333",
Email = "eeeeeeee",
UpdatedAt = DateTime.Now
};
var entryEntity = dbContext.Users.Attach(user1); //entryEntity.State = EntityState.Unchanged; 有没有这句话结果是一样的
entryEntity.Property(p => p.Phone).IsModified = true;
entryEntity.Property(p => p.Email).IsModified = false;
dbContext.SaveChanges(); //数据库中只有明确标为`IsModified`为`true`的 `Phone`的值更改了,其余值保持不变 var item = dbContext.Users.FirstAsync().Result;
//item 的值和 user 中值完全相同
var user = new User()
{
Id = 1,
Phone = "+12333333333",
Email = "eeeeeeee",
UpdatedAt = DateTime.Now
};
var entryEntity = dbContext.Users.Attach(user1); entryEntity.State = EntityState.Modified;
entryEntity.Property(p => p.Phone).IsModified = true;
entryEntity.Property(p => p.Email).IsModified = false;
dbContext.SaveChanges(); //数据库中只有明确标为`IsModified`为`false`的 `Emial`的值没有更改,其余值都会做更改 var item = dbContext.Users.FirstAsync().Result;
//item 的值和 user 中值完全相同
var user = dbContext.Users.FirstAsync().Result;
var userTemp = new User { Id = 1 };
dbContext.Users.Attach(userTemp);
//报异常,原因同例1
var user = dbContext.Users.AsNoTracking().FirstAsync().Result;
var userTemp = new User { Id = 1 };
dbContext.Users.Attach(userTemp);
//不报异常

EntityFrameworkCore 中的 Attach 方法的更多相关文章

  1. 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为

    在日常使用Entity Framework中,数据更新通常会用到.下面就简单封装了一个DBContext类 public partial class EFContext<T> : DbCo ...

  2. 因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 。。。

    因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified&quo ...

  3. EF 相见恨晚的Attach方法

    一个偶然的机会,让我注意了EF 的Attach方法,于是深入了解让我大吃一惊 在我所参与的项目中所有的更新操作与删除操作都是把原对象加载出来后,再做处理,然后再保存到数据库,这样的操作不缺点在于每一次 ...

  4. EntityFrameworkCore中的OnModelCreating

    在我们使用EntityFrameworkCore作为数据库ORM框架的时候,不可避免的要重载DbContext中的一个虚方法OnModelCreating,那么这个方法到底是做什么的?到底有哪些作用呢 ...

  5. EntityFrameworkCore中的实体状态

    Entry表示一个追踪,里面有state属性,是EntityState的枚举类型. 每一个实体都有一个相对应的Entry: var entry = dbContext.ChangeTracker.En ...

  6. laravel中的attach and detach toggle method

    创建模型 post  and  user 以及 users , posts ,user_post(favorities)测试数据 在此可以看上一篇中的数据,本次测试数据利用的上一篇的数据.detach ...

  7. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...

  8. java 执行 jar 包中的 main 方法

    java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...

  9. 为什么不能在init和dealloc函数中使用accessor方法

    前言 为什么不要在init和dealloc方法中调用getter和setter:Apple在Mac与iOS中关于内存管理的开发文档中,有一节的题目为:"Don'tUse Accessor M ...

随机推荐

  1. [Angular] How to get Store state in ngrx Effect

    For example, what you want to do is navgiate from current item to next or previous item. In your com ...

  2. jquery表格简单插件

    1.一直对jquery插件感觉非常神奇.今天动手写了一个超级简单的案例. 2.效果 3.体会 a.jquery插件编写能力. 须要具备一定js能力的编写.还有写css样式的运用:希望以后这方面会有提高 ...

  3. 经验之谈—让你看明确block

    事实上我感觉不常常使用block的朋友.对block应该是比較陌生的,那么如今我们来扒开block的真面目,看看block的本质 普通的局部变量.block内部仅仅会引用它初始的值(block定义那一 ...

  4. Exchanging Partitions and Subpartitions with Tables--官方文档

    原文地址:https://dev.mysql.com/doc/refman/5.6/en/partitioning-management-exchange.html In MySQL 5.6, it ...

  5. 配置spotlight连接linux服务器

    本文转自(https://blog.csdn.net/qq_31391261/article/details/79429098) 一.配置spotlight连接linux服务器 1.以管理员身份运行软 ...

  6. VBS 脚本调用

    https://my.oschina.net/Tsybius2014/blog/602641

  7. ubuntu-系统密匙

    1.安装虚拟机xp,需要密匙,网上搜了一个,验证能用 MRX3F-47B9T-2487J-KWKMF-RPWBY 2.安装vm也需要密匙,如下可用 HC6JC-FPJ4M-RZM61-48852-2A ...

  8. ListView-divider 分割线的设置

    1.去掉分割线 android:divider="@null" 2.设置分割线颜色跟宽度 android:divider="#19000000" android ...

  9. kafka同步生产者和异步生产者深入剖析

    什么是kafka同步生产者,什么是kafka异步生产者? 比如这里某个topic有3个分区. kafka同步生产者:这个生产者写一条消息的时候,它就立马发送到某个分区去.  kafka异步生产者:这个 ...

  10. eclipse中的乱码问题

    在新建项目或导入工程时常常遇到的问题: 1.导入工程后,Java文件中文乱码 项目右键--Properties--Resource(快捷键Alt+Enter),在Text file encoding中 ...