Entity Framework 更新模式的Attach与EntityState.Modified模式之分。Entity Framework 更新模式的Attach与EntityState.Modified模式的界别。

数据库被有一个City表

数据库中来一个City表

大红鹰葡京会 1

大红鹰葡京会 2

 

 

开头时数:

起来时数:

大红鹰葡京会 3

大红鹰葡京会 4

 

 

 

 

实体类和Fluent Api配置映射

实业类及Fluent Api配置映射

大红鹰葡京会 5大红鹰葡京会 6

大红鹰葡京会 7大红鹰葡京会 8

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

        public string Name { get; set; }

        public int? ParentId { get; set; }

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

        public string Name { get; set; }

        public int? ParentId { get; set; }

    }

View
Code

View
Code

大红鹰葡京会 9大红鹰葡京会 10

大红鹰葡京会 11大红鹰葡京会 12

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

View
Code

View
Code

Entity Framework 上下文类

Entity Framework 上下文类

 

 

大红鹰葡京会 13大红鹰葡京会 14

大红鹰葡京会 15大红鹰葡京会 16

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

    }

}
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

View Code

 

 

 

 

 

 

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

 方式一,使用Attach,并更新某个属性的价(注意,不是富有的性质都犯改)

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

以深圳改成了肇庆,从Sql
Profiler中得望,生成的update语句,只是修改了name列

用深圳修改成了肇庆,从Sql
Profiler中好看看,生成的update语句,只是修改了name列

大红鹰葡京会 17

大红鹰葡京会 18

using (var context = new EFContext())
{
    //方式二
    var model = context.Citys.Find(5);
    model.Name = "潮州";
    context.Entry(model).State = System.Data.Entity.EntityState.Modified;
    context.SaveChanges();
}
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语句修改了独具列(主键除外)

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

大红鹰葡京会 19

大红鹰葡京会 20

用一个entity大红鹰葡京会标记为System.Data.Entity.EntityState.Modified更新时会更新具有的排列(而不仅是改了排),实际该采取啊种方式相场合而肯定。

拿一个entity标记为System.Data.Entity.EntityState.Modified更新时会见更新具有的排列(而不光是改了排),实际该应用啊种方式看看场合而一定。

终极数据库中数也:

说到底数据库中数据吧:

大红鹰葡京会 21

大红鹰葡京会 22

 

 

参考资料:

参考资料:

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

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

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

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

 

 

 

 

相关文章

admin

网站地图xml地图