2013-07-19 32 views
0

我想在EF(5.0,數據庫優先)中使用映射的刪除過程使用實體中的更新屬性作爲參數。獲取映射刪除過程使用已更改的實體數據

的映射過程需要兩個參數:

DeleteRow: 
@Id : int   -> (Key) Id : int32 
@Modifiedby : char ->   Modifiedby : string 

在我想改變Modifiedby值刪除程序被調用之前控制器。

Subscription subscription = context.Subscription.Find(id); 
subscription.Modifiedby = "Test"; 
context.Subscription.Remove(subscription); 
context.ChangeTracker.DetectChanges(); 
context.SaveChanges(); 

然而,當程序被調用總是傳遞給刪除程序Modifiedby舊值。

我不想在刪除實體之前對數據庫執行更新調用。

回答

0

最終通過使用未跟蹤的實體來解決此問題。從這個博客文章得到了這個想法:http://blogs.msdn.com/b/alexj/archive/2009/03/27/tip-9-deleting-an-object-without-retrieving-it.aspx

AsNoTracking()方法調用被添加,修改後,實體被附加到上下文,然後刪除。

Subscription subscription = context.Subscription.AsNoTracking() 
    .Include(i => i.RelatedEntity) 
    .FirstOrDefault(c => c.SubscriptionId == id); 
subscription.Modifiedby = "TEST-Subcription"; 
subscription.RelatedEntity.ToList().ForEach(f => f.Modifiedby = "TEST_Related"); 
context.Subscription.Attach(subscription); 
context.Subscription.Remove(subscription); 
context.SaveChanges(); 

這允許將新的Modifiedby值發送到映射的刪除過程。我還可以爲相關實體設置新的值,這些值也具有映射過程,並且設置了級聯刪除。