关于EF中ApplyCurrentValues和ApplyOriginalValues区别

时间:2023-12-28 23:46:08

关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用。

//
        // 摘要:
        //     将 System.Data.Objects.ObjectStateEntry 的 System.Data.Objects.ObjectStateEntry.CurrentValues
        //     属性设置为与所提供对象的属性值相匹配。
        //
        // 参数:
        //   currentEntity:
        //     具有要应用于原始对象的属性更新的已分离对象。
        //
        // 返回结果:
        //     已更新的对象。

public TEntity ApplyCurrentValues(TEntity currentEntity);

参数currentEntity的取值方式有两种

(1)从内存中查出来的对象,编辑你需要编辑的字段,然后传入。

var user = db.Users.Where(m => m.ID== ID).FirstOrDefault();

user.Age = 10;

user.Sex="M";

db.CreateObjectSet<Users>().ApplyCurrentValues(user);
db.SaveChanges() ;

(2)用new 关键字创建的新对象,此处注意,创建的对象必需满足数据表约束,然后传入。

db.CreateObjectSet<Users>().ApplyCurrentValues(new Users(){

ID = ID/*注意:此处的ID必需是数据库中存在的*/,

Age=10,

Sex="M"

});

db.SaveChanges() ;

   

//
        // 摘要:
        //     将 System.Data.Objects.ObjectStateEntry 的 System.Data.Objects.ObjectStateEntry.OriginalValues
        //     属性设置为与所提供对象的属性值相匹配。
        //
        // 参数:
        //   originalEntity:
        //     具有要应用于原始对象的属性更新的已分离对象。
        //
        // 返回结果:
        //     已更新的对象。

public TEntity ApplyOriginalValues(TEntity originalEntity);

参数originalEntity的取值方式只有一种

(1)从内存中查出来的对象,编辑你需要编辑的字段,然后传入。

var user = db.Users.Where(m => m.ID== ID).FirstOrDefault();

user.Age = 10;

user.Sex="M";

db.CreateObjectSet<Users>().ApplyCurrentValues(user);
db.SaveChanges() ;