Entity framework 通过存根实体首次更新实体框架代码

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

在EF代码中,是否可以首先使用存根对象更新而不查询数据库中的整行

e、 g

上面的代码是否会创建一个Update语句,该语句将使DinnerID 1行的以下列为null

标题、事件日期、地址、国家


有没有一种方法,比如“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");