將EF5與通用存儲庫模式配合使用,並將ninject用於依賴關係禁止,並在嘗試使用存儲過程與我的edmx一起更新實體到數據庫時遇到問題。ObjectStateManager中已存在具有相同鍵的對象。 ObjectStateManager無法使用相同的密鑰跟蹤多個對象
我在DbContextRepository.cs更新:
public override void Update(T entity)
{
if (entity == null)
throw new ArgumentException("Cannot add a null entity.");
var entry = _context.Entry<T>(entity);
if (entry.State == EntityState.Detached)
{
_context.Set<T>().Attach(entity);
entry.State = EntityState.Modified;
}
}
從我AddressService.cs可以追溯到我的倉庫,我有:
public int Save(vw_address address)
{
if (address.address_pk == 0)
{
_repo.Insert(address);
}
else
{
_repo.Update(address);
}
_repo.SaveChanges();
return address.address_pk;
}
當它擊中的安裝和EntityState.Modified它有錯誤的pukes:
ObjectStateManager中已存在具有相同鍵的對象。 ObjectStateManager不能使用同一個鍵跟蹤多個對象。
我已經瀏覽了堆棧和Internet上的許多建議,而不是提出任何可以解決它的問題。任何周圍的工作將不勝感激。
謝謝!
謝謝。所以我創建了一個接口IEntity int ID {get;組; }然後試圖做公共覆蓋無效更新(T實體)其中T:IEntity但它不喜歡T:IEntity。這是在一個存儲庫類,即公共類DbContextRepository:BaseRepository 其中T:類 如果這有所不同。謝謝! –
Juan
在這種情況下直接把約束放在類定義 –
.hmm ..仍然沒有太多的運氣。我想知道它是否因爲我正在使用edmx模型。但是我無法將約束直接放在類上,因爲它實現了BaseRepository和IRepository。另外在edmx中,實體來自視圖,主鍵就像address_pk。 – Juan