Entity framework 通过存根实体首次更新实体框架代码
在EF代码中,是否可以首先使用存根对象更新而不查询数据库中的整行 e、 g 上面的代码是否会创建一个Update语句,该语句将使DinnerID 1行的以下列为null 标题、事件日期、地址、国家Entity framework 通过存根实体首次更新实体框架代码,entity-framework,ef-code-first,Entity Framework,Ef Code First,在EF代码中,是否可以首先使用存根对象更新而不查询数据库中的整行 e、 g 上面的代码是否会创建一个Update语句,该语句将使DinnerID 1行的以下列为null 标题、事件日期、地址、国家 有没有一种方法,比如“PropertyModified”=true,其余的则使它们=false,这样HostedBy是唯一一个将被更新的方法?我想您正在寻找这种方法 我想你在找 public void UpdateDinner(Dinner existingDinner) { var st
有没有一种方法,比如“PropertyModified”=true,其余的则使它们=false,这样HostedBy是唯一一个将被更新的方法?我想您正在寻找这种方法
- 我想你在找
public void UpdateDinner(Dinner existingDinner)
{
var stub = new Dinner { DinnerId = existingDinner.DinnerId };
ctx.Dinners.Attach(stub);
ctx.ApplyCurrentValues(existingDinner);
ctx.SaveChanges();
}
ApplyCurrentValues将标量值从现有对象复制到图形中的对象(在上述情况下为存根实体)
从MSDN的备注部分:
与对象原始值不同的任何值都标记为已修改
这就是你想要的吗?试试这个,它可能是特定于EF代码的,它似乎与EF不同
var dinner = context.Dinners.Find(1);
context.Entry(dinner).Property(d => d.HostedBy).IsModified = true;
context.SaveChanges();
从
“将属性标记为已修改会强制在调用SaveChanges时将更新发送到该属性的数据库,即使该属性的当前值与其原始值相同。”根据Paul的回答,当您首先使用EF模型或数据库时,以下操作将起作用:
context.ObjectStateManager.GetObjectStateEntry(dinner).SetModifiedProperty("HostedBy");
为什么找不到
ApplyCurrentValues()
?方法不存在。
context.ObjectStateManager.GetObjectStateEntry(dinner).SetModifiedProperty("HostedBy");