亚洲必赢手机Modified形式的区分

by admin on 2019年11月8日

数据库中有三个City表

亚洲必赢手机 1

 

起来时数据:

亚洲必赢手机 2

 

 

实体类与Fluent Api配置映射

亚洲必赢手机 3亚洲必赢手机 4

public class City 
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public int? ParentId { get; set; }

    }

View
Code

亚洲必赢手机 5亚洲必赢手机 6

public class CityMap : EntityTypeConfiguration<City>
    {
        public CityMap()
        {
            ToTable("City");
            HasKey(c => c.Id);
            Property(c => c.Name).HasMaxLength(50);
        }
    }

View
Code

Entity Framework 上下文类

 

亚洲必赢手机 7亚洲必赢手机 8

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列

亚洲必赢手机 9

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语句改进了具有列(主键除此而外卡塔 尔(英语:State of Qatar)

亚洲必赢手机 10

将一个entity标志为System.Data.Entity.EntityState.Modified更新时会更新具有的列(而不只是修改了列卡塔尔国,实际该选择哪一种情势视场馆而定。

说起底数据库中数据为:

亚洲必赢手机 11

 

参谋资料:

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

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

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图