【问题标题】:copying one objects data to other? [closed]将一个对象数据复制到另一个对象? [关闭]
【发布时间】:2014-11-12 22:09:28
【问题描述】:

我需要更新 EF 记录,在方法中我有 EF 对象和另一个我想用来更新数据的新对象。但我不确定如何将数据从新对象复制到现有对象。

请帮忙。 这是我的代码:

public int   PostHomeLead(string _lead)
   {

       try
       {
           int result = 0;
           Lead lead = new Lead();
           lead = new JavaScriptSerializer().Deserialize<Lead>(_lead);

           //check if lead exist with same session id, if so update it other wise add new.
           Lead existingLead = new Lead();
           existingLead = db2.HomeLoanCustRepo.GetByID(lead.Lead_id);

           if (existingLead == null)
           {
               db2.HomeLoanCustRepo.Insert(lead);
               db2.Save();
               result = 1;
           }
           else
           {                   
               db2.HomeLoanCustRepo.Update(lead);
               db2.Save();
               result = 1;
           }
           return result;           
       }
       catch(Exception ex)
       {
           throw ex;
       }

   }

【问题讨论】:

  • 您的代码有什么具体问题?
  • @Servy 我问的是如何将一个对象数据复制到另一个对象。

标签: c# asp.net .net entity-framework


【解决方案1】:

要么手动映射属性:

existingLead.Foo = deserializedLead.Foo;
existingLead.Bar = deserializedLead.Bar;
existingLead.Baz = deserializedLead.Baz;

或使用执行此操作的库,例如 AutoMapper。

至于您的评论,creating a deep copy 似乎是您所追求的。请注意,当您不验证可以更新哪些属性时,这允许overposting or mass assignment。使用克隆或映射时,您需要 Attach() 克隆的对象,因为它与 GetByID() 返回的对象不同,因此 Entity Framework 的更改跟踪器将无法识别它。

【讨论】:

  • 是否可以使用 linq 或 lambda 或任何开箱即用的 .net 类/库?
  • @user576510 查看编辑。
  • 谢谢,我正在使用 Attach() 但它会抛出错误,因为主键已被另一个对象使用。请帮我解决一下。
  • 解决方案是在 Web 和此站点上搜索您收到的实际错误,并应用您从那里读到的内容。对不起,我不这样做chameleon questions。最后一个提示:您的错误是由首先调用GetByID() 引起的,它将该实体拉入更改跟踪器,并使用相同的上下文尝试保存具有相同ID 的另一个 实体。你需要使GetByID()查询.AsNoTracking()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
相关资源
最近更新 更多