使用Entity Framework在更新父项时插入多个子对象

时间:2014-03-06 23:23:18

标签: c# entity-framework automapper

我正试图通过资产中的设置者跟踪我的资产属性的变化,这是有效的。

然后我传递此资产及其更改:

(Business) Asset
   - public string Name...
   - public DateTime ChangedDate...
   -List<ChangeLogs>

到一个方法,我正在使用AutoMapper将其及其子节点转换为(EntityFramework)资产;这也很有用。

在我的方法中我

using(var dbContext = new DBContext())
{

   // Map our (Business)Asset to our (Entity Framework)Asset
   var dataAsset = Mapper.Map<Business.Asset, Data.Asset>(asset);

   dbContext.Assets.Attach(asset);

   dbCore.SaveChanges();
}

我在附加行上收到此错误:

  

ObjectStateManager中已存在具有相同键的对象。   ObjectStateManager无法跟踪具有相同对象的多个对象   键。

相信它所指的关键是我的ChangeLog Id(PK)。

有没有办法将多个ChangeLog添加到我的资产然后保存?

1 个答案:

答案 0 :(得分:0)

如果您有一个分离的实体并尝试将其附加回上下文中已存在的实体,您将获得此异常。

要解决此问题,请尝试加载旧实体并保存新实体的更改。

using(var dbContext = new DBContext())
{
   // Map our (Business)Asset to our (Entity Framework)Asset
   var dataAsset = Mapper.Map<Business.Asset, Data.Asset>(asset);
   var oldEntity = dbContext.Assets.FirstOrDefault(m => m.Id == dataAsset.Id);
   dbContext.Entry(oldEntity).CurrentValues.SetValues(dataAsset);
   dbContext.Entry(oldEntity.ChangeLogs).CurrentValues.SetValues(dataAsset.ChangeLogs);

   dbContext.SaveChanges();
}