我正试图通过资产中的设置者跟踪我的资产属性的变化,这是有效的。
然后我传递此资产及其更改:
(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添加到我的资产然后保存?
答案 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();
}