Entity Framework 更新模式之Attach与EntityState.Modified模式的区别_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Entity Framework 更新模式之Attach与EntityState.Modified模式的区别

Entity Framework 更新模式之Attach与EntityState.Modified模式的区别

 2017/12/4 3:00:46  Jichan·Jong  程序员俱乐部  我要评论(0)
  • 摘要:数据库中有一个City表初始时数据:实体类与FluentApi配置映射publicclassCity{publicintId{get;set;}publicstringName{get;set;}publicint?ParentId{get;set;}}ViewCodepublicclassCityMap:EntityTypeConfiguration<City>{publicCityMap(){ToTable("City");HasKey(c=>c.Id);Property
  • 标签:Framework 区别 模式

数据库中有一个City表

 

初始时数据:

 

 

实体类与Fluent Api配置映射

class="code_img_closed" src="/Upload/Images/2017120403/0015B68B3C38AA5B.gif" alt="">
public class City 
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int? ParentId { get; set; }

    }
logs_code_collapse" style="font-size: 18px">View Code
public class CityMap : EntityTypeConfiguration<City>
    {
        public CityMap()
        {
            ToTable("City");
            HasKey(c => c.Id);
            Property(c => c.Name).HasMaxLength(50);
        }
    }
View Code

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);

    }

}
View Code

 

 

 

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

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

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

using (var context = new EFContext())
{
    //方式二
    var model = context.Citys.Find(5);
    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

 

 

发表评论
用户名: 匿名