如何在实体框架中单元测试级联删除实体?
问题描述:
我们如何测试Entity Framework中实体的级联删除?如何在实体框架中单元测试级联删除实体?
我有两个实体[父和子],我正在使用FakeDbset(在内存集合中),如果我删除父级,那么他们的所有子级从数据库级联的情况下删除,那么同样的情况如何得到在FakeDbSet中测试?
我知道级联是数据库功能,是努力在这种情况下工作吗?
答
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));
}
}
不要单元测试此。如果约束从数据库中删除(无论出于何种原因,可能是错误的升级脚本),您的单元测试永远不会注意到。这是集成测试或端到端测试的情况。 –