我有類似這樣的車型:如何在實體的屬性引用同一個實體時刪除實體?
public class Line
{
public int Id {get; set;}
public int FromStopId {get; set;}
public int ToStopId {get; set;}
public virtual Stop FromStop {get; set;}
public virtual Stop ToStop {get; set;}
}
public class Stop
{
public int Id {get; set;}
public int OwnerId {get; set;}
public virtual Owner Owner {get; set;}
}
Lines
有不同Stops
,然而,許多Stops
可以有相同的Owner
。
予加載使用Include
如下完整Line
實體:
public virtual IQueryable<T> Get(int id, params Expression<Func<T, object>>[] include)
{
if (include.Any())
{
var set = include.Aggregate<Expression<Func<T, object>>, IQueryable<T>>
(dbSet, (current, expression) => current.Include(expression));
}
return dbSet.AsNoTracking<T>().Where(x => x.Id == id);
}
使用上面可以裝入一個Line
實體,其Stops
實體及其Owners
,其在這種情況下是一樣的。
現在,當我試圖刪除Line
實體我做的:
dbSet.Attach(entity);
dbSet.Remove(entity);
不過,我得到異常:
附加型「所有者」的實體失敗,因爲另一個實體相同類型已具有相同的主鍵值。如果圖中的任何實體具有衝突的鍵值,則使用「附加」方法或將實體的狀態設置爲「未更改」或「已修改」時可能會發生這種情況。這可能是因爲一些實體是新的並且還沒有收到數據庫生成的關鍵值。在這種情況下,使用'Add'方法或'Added'實體狀態來跟蹤圖形,然後根據情況將非新實體的狀態設置爲'Unchanged'或'Modified'。
我假設這是因爲Stops
都有相同的Owner
。但是,當加載Line
時,Owner
不是相同的實體,而是每個Stop
獨立創建的2個實體。
如何在這種情況下刪除Line
實體?
檢查此[鏈接](http://stackoverflow.com/questions/30350058/attaching-an-entity-of-type-x-failed-because-another-entity-of-the-same-type)幫助。如果實體從上下文加載,則不要附加它。 – Sarang
@Sarang實體被分離,因爲我使用了'AsNoTracking()'。 –