2013-11-20 32 views
0

,而不是我從下面的列表中移除項目Entitystate設置爲修改的刪除

List<string> cities = new List<string>(); 
    cities.Add("New York"); 
    cities.Add("Mumbai"); 
    cities.Add("Berlin"); 
    cities.Add("Istanbul"); 

cities.Remove(2); 

的情況下跟蹤這一刪除。

var entityChangeList = ChangeTracker.Entries().Where(p => p.State == EntityState.Added || p.State == EntityState.Deleted || p.State == EntityState.Modified); 
    return entityChangeList.Count(); 

儘管entityChangeList.Count()爲1,但修改了EntityState。根據我的理解,它必須被刪除。 我應該手動將狀態設置爲刪除嗎?

謝謝

回答

1

您是否試圖直接從DBSet中刪除條目?在這種情況下,EntityState將被設置爲已刪除。但是,如果您嘗試使用外鍵刪除DBSet中另一個列表中的條目,則外鍵將設置爲空(如果您的數據庫允許爲空),導致父DBSet的狀態將被修改並且不會被刪除。

0

除非您想覆蓋該行爲,否則不應手動設置狀態。如果你調用Remove方法,EF應該自己設置狀態。看下面的例子

var itemToRemove = Get(id, context); 
var result = context.Set<T>().Remove(itemToRemove); 
context.SaveChanges();