2016-11-30 66 views
2

我們如何測試Entity Framework中實體的級聯刪除?如何在實體框架中單元測試級聯刪除實體?

我有兩個實體[父和子],我正在使用FakeDbset(在內存集合中),如果我刪除父級,那麼他們的所有子級從數據庫級聯的情況下刪除,那麼同樣的情況如何得到在FakeDbSet中測試?

我知道級聯是數據庫功能,是努力在這種情況下工作嗎?

+1

不要單元測試此。如果約束從數據庫中刪除(無論出於何種原因,可能是錯誤的升級腳本),您的單元測試永遠不會注意到。這是集成測試或端到端測試的情況。 –

回答

1

https://github.com/aspnet/EntityFramework/issues/3924

這幫助了我,你需要有孩子在你的範圍內,所以你需要使用預先加載到.INCLUDE孩子。

這下面的代碼是從我附鏈接:

[Fact] 
void test_written_in_notepad() 
{ 
    List<int> childIds; 
    using (var context = CreateInMemoryContext()) 
    { 
     var parent = context.Parents.Include(p => p.Children).FirstOrDefault(p => p.Id == 1); 
     childIds = p.Children.Select(c => c.Id).ToList(); 
     context.Remove(parent); 
     context.SaveChanges(); 
    } 

    using (var context = CreateInMemoryContext()) 
    { 
     Assert.Empty(context.Children.Where(c => childIds.Contains(c.Id)); 
    } 
}