EntityFrameworkCore 中的 Attach 方法
Attach 的坑
Model | Filed | Database Value | Console Value |
---|---|---|---|
User | Phone | +123000000000 | +12333333333 |
User | 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 方法的更多相关文章
- 关于Entity Framework更新的几种方式以及可能遇到的问题(附加类型“Model”的实体失败,因为相同类型的其他实体已具有相同的主键值)在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为
在日常使用Entity Framework中,数据更新通常会用到.下面就简单封装了一个DBContext类 public partial class EFContext<T> : DbCo ...
- 因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 。。。
因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified&quo ...
- EF 相见恨晚的Attach方法
一个偶然的机会,让我注意了EF 的Attach方法,于是深入了解让我大吃一惊 在我所参与的项目中所有的更新操作与删除操作都是把原对象加载出来后,再做处理,然后再保存到数据库,这样的操作不缺点在于每一次 ...
- EntityFrameworkCore中的OnModelCreating
在我们使用EntityFrameworkCore作为数据库ORM框架的时候,不可避免的要重载DbContext中的一个虚方法OnModelCreating,那么这个方法到底是做什么的?到底有哪些作用呢 ...
- EntityFrameworkCore中的实体状态
Entry表示一个追踪,里面有state属性,是EntityState的枚举类型. 每一个实体都有一个相对应的Entry: var entry = dbContext.ChangeTracker.En ...
- laravel中的attach and detach toggle method
创建模型 post and user 以及 users , posts ,user_post(favorities)测试数据 在此可以看上一篇中的数据,本次测试数据利用的上一篇的数据.detach ...
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- 为什么不能在init和dealloc函数中使用accessor方法
前言 为什么不要在init和dealloc方法中调用getter和setter:Apple在Mac与iOS中关于内存管理的开发文档中,有一节的题目为:"Don'tUse Accessor M ...
随机推荐
- 信号 signal sigaction补充
目前linux中的signal()是通过sigation()函数实现的. 由signal()安装的实时信号支持排队,同样不会丢失. 先看signal 和 sigaction 的区别: 关键是 stru ...
- 亚马逊AWS的route53的收费,月费最低 0.9 USD
亚马逊AWS的route53的收费Amazon Route 53 定价 https://aws.amazon.com/cn/route53/pricing/ 一文中,对于一些术语的解释第一项收费--域 ...
- 最小生成树(MST,minimum spanning tree)
生成树:由图生成的树,由图转化为树,进一步可用对树的相关操作来对图进行操作.最小指的是权值最小: 生成树是边的集合,如下图所示的最小生成树:MST={{a,b},{a,f},{f,c}} 本文主要探讨 ...
- 63.当当网txt数据按行切割与合并
获取文件有多少行 //获取文件有多少行 int getN(char *path) { FILE *pf = fopen(path, "r"); if (pf==NULL) { ; ...
- Flume的Events
Flume NG传输的数据的基本单位是event,如果是文本文件,通常是一行记录,这也是事务的基本单位.
- CSRF Failed: Referer checking failed - no Referer
postman模拟登录出了这个错误,其实看标题就知道大概是怎么回事,网上大概找了办法,也没说到位,所以干脆自己找源码了. 问题很明显就是出在 CSRF 上,理所当然去查看 CsrfViewMiddle ...
- echarts统计图踩坑合集
1:折线图条的颜色修改 series : [ { name : 'SBP(收缩压)', type : 'line', itemStyle : { normal : { lineStyle:{ colo ...
- C++基于矢量图形库cairo画图图形
//sudo apt-get install libcairo2-dev //pkg-config --cflags --libs cairo //-I/usr/include/cairo -I/us ...
- 淺談Unity 5.4新功能:Light Probe Proxy Volume
作者:CHRISTOPHER POPE 原文連結 Unity 5.4進入到Beta的階段.当中一個特別的功能是光照探頭代理Light Probe Proxy Volume(LPPV).本篇會向大家介紹 ...
- Ubuntu配置图形桌面LXDE和VNC、中文语言包、中文输入法
Ubuntu配置图形桌面LXDE和VNC.中文语言包.中文输入法 http://www.lijiejie.com/ubuntu-vps-config-lxde-vnc/ LXDE是Ubuntu图形桌面 ...