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


    数据库中有一个City表

    初始时数据:

     

     

    实体类与Fluent Api配置映射

    public class City 
        {
            public int Id { get; set; }
    
            public string Name { get; set; }
    
            public int? ParentId { get; set; }
    
        }
    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

     

     

  • 相关阅读:
    A. Greg and Array 夜
    zoj 2314 Reactor Cooling 夜
    sgu 104. Little shop of flowers 夜
    C. Greg and Friends 夜
    sgu 103. Traffic Lights 夜
    B. Greg and Graph 夜
    B. Yaroslav and Two Strings 夜
    zoj 2313 Chinese Girls' Amusement 夜
    sgu 101. Domino 夜
    hdu 4532 湫秋系列故事——安排座位 夜
  • 原文地址:https://www.cnblogs.com/godbell/p/7967899.html
Copyright © 2020-2023  润新知