数据库中有一个City表

初始时数据:

实体类与Fluent Api配置映射

public class City
{
public int Id { get; set; } public string Name { get; set; } public int? ParentId { get; set; } }
public class CityMap : EntityTypeConfiguration<City>
{
public CityMap()
{
ToTable("City");
HasKey(c => c.Id);
Property(c => c.Name).HasMaxLength();
}
}

Entity Framework 上下文类

public class EFContext : DbContext
{
public EFContext() : base("name=MyConnection")
{ } public DbSet<City> Citys { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<EFContext>(null);
modelBuilder.Configurations.Add(new CityMap());
base.OnModelCreating(modelBuilder); } }

方式一,使用Attach,并更新某个属性的值(注意,不是所有的属性都作修改)

using (var context = new EFContext())
{
//方式一
var entity = context.Citys.Find();
context.Citys.Attach(entity);
entity.Name = "肇庆";
context.SaveChanges();
}

将深圳修改成了肇庆,从Sql Profiler中可以看出,生成的update语句,只是修改了name列

using (var context = new EFContext())
{
//方式二
var model = context.Citys.Find();
model.Name = "潮州";
context.Entry(model).State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
}

将珠海修改成潮州,注意,本次没有修改ParentId,但是Sql Profiler中生成的语句看出,Update语句修改了所有列(主键除外)

将一个entity标记为System.Data.Entity.EntityState.Modified更新时会更新所有的列(而不仅是修改了列),实际该使用哪种方式视场合而定。

最后数据库中数据为:

参考资料:

https://stackoverflow.com/questions/30987806/dbset-attachentity-vs-dbcontext-entryentity-state-entitystate-modified

https://msdn.microsoft.com/en-us/data/jj592676

Entity Framework 更新模式之Attach与EntityState.Modified模式的区别的更多相关文章

  1. Entity Framework 更新失败,调试后发现是AsNoTracking的原因

    public override int SaveChanges() { var changedEntities = ChangeTracker.Entries().Where(e => e.St ...

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

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

  3. C# Entity Framework 更新数据的三种方法

    例: 实体类: public class TestDbContext : DbContext { public DbSet<Test> Tests { get; set; } public ...

  4. Oracle + Entity Framework 更新没有设置主键的表

    最近用Entity Framework 开发的时候,发现一个问题,在默认情况下,EF不能对一个没有主键的表进行更新.插入和删除的动作. 那么,应该怎么处理没有主键的表呢? 我们打开这个表的edmx文件 ...

  5. Entity Framework应用:Code First的实体继承模式

    Entity Framework的Code First模式有三种实体继承模式 1.Table per Type (TPT)继承 2.Table per Class Hierarchy(TPH)继承 3 ...

  6. EntityFramework_MVC4中EF5 新手入门教程之六 ---6.通过 Entity Framework 更新关联数据

    在前面的教程中,您将显示相关的数据 :在本教程中,您会更新相关的数据.对于大多数的关系,这个目标是可以通过更新相应的外键字段来达到的.对于多对多关系,实体框架并不直接,暴露联接表,因此您必须显式添加和 ...

  7. Entity Framework应用:根据实体的EntityState状态实现增删改查

    在上一篇文章中,我们讲解了使用EF实现简单的增删改成,在这篇文章中我们使用实体的EntityState状态来优化数据的增删改查. 一.修改数据 上篇文章中的修改数据的方法是EF官方推荐的方式,即先查询 ...

  8. Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查

    在上一篇文章中讲解了如何生成EF的DBFirst模式,接下来讲解如何使用DBFirst模式实现数据库数据的增删改查 一.新增数据 新增一个Student,代码如下: static void Add() ...

  9. Entity Framework 更新带外键的实体为null

    using (var ctx = new PortalContext()){    var city = ctx.Cities.Find(42);    ctx.Entry(city)        ...

随机推荐

  1. Chapter 5. Conversions and Promotions

    JLS解读:https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html 基本数据类型的转换 1) boolean不可以转换为其他的数据类型 ...

  2. Python -- Gui编程 -- Tkinter的使用 -- 菜单与画布

    1.菜单 tkMenu.py import tkinter root = tkinter.Tk() menu = tkinter.Menu(root) submenu = tkinter.Menu(m ...

  3. PMP备考指南之相关事项介绍

    本文已同步至 GitHub/Gitee/公众号,感兴趣的同学帮忙点波关注~ PMP是当今IT.通信.建筑.等高新技术行业的热门资格认证,无论是技术升级管理,还是管理者的能力提升,都离不开PMP的理论体 ...

  4. spring整合mongodb

    使用spring整合mongodb maven 依赖 <dependency> <groupId>org.mongodb</groupId> <artifac ...

  5. Java并发编程笔记之ThreadLocalRandom源码分析

    JDK 并发包中 ThreadLocalRandom 类原理剖析,经常使用的随机数生成器 Random 类的原理是什么?及其局限性是什么?ThreadLocalRandom 是如何利用 ThreadL ...

  6. 3YAdmin-专注通用权限控制与表单的后台管理系统模板

    3YAdmin基于React+Antd构建.GitHub搜索React+Antd+Admin出来的结果没有上百也有几十个,为什么还要写这个东西呢? 一个后台管理系统的核心我认为应该是权限控制,表单以及 ...

  7. dev中ASPxListBox单选和多选的设置

    只需要设置SelectionMode,为Multiple时是单选,CheckColumn时是多选

  8. jQuery二维码

    现在二维码很火,因为他可以很方便的贴到任何地方,只要扫一扫就可以看到二维码的内容 ok 废话少说,上代码 这个二维码基于jquery和jquery.qrcode插件 所以使用前先引入 <scri ...

  9. CSS3 颜色属性

    关键字颜色 red 十六进制颜色 #FF0000 RGB颜色   rgb(255,0,0) 新增的颜色表示方法 RGBa: RGB代表光的三原色,Red.Green和Blue CSS3中可以增加一个值 ...

  10. 【转载&&干货】Noip应试技巧

    NOIP应试技巧 如何看待别人的经验? 我想大家都有台上的学长滔滔不绝,但是自己在台下漠不关心,或是老师考试前的叮嘱说完一会儿功夫就忘记了的经历吧.所以,有可能我接下来的所说的话,一到考场上就全部忘记 ...