2016-11-30 135 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)); 
    } 
}