我正在寻找有关从 BeforeSaveEntity(EntityInfo entityInfo) 返回 false 时在客户端会发生什么的文档,但我什么也没找到,所以我决定自己进行试验。
我对 Doccode 项目进行了测试:
test("create customer returning false from contextprovider", 1, function () {
var em = newEm();
var category = em.createEntity('Category', { CategoryName: 'Julian Category' });
stop();
em.saveChanges().then(function (saveResult) {
//ok(category.entityAspect.entityState.isAdded(), "Added state because contextprovider return false");
ok(em.hasChanges() === false,"No changes pending");
})
.fail(function (error) {
debugger;
})
.fin(function () {
start();
});
});
我发现这两个断言都是正确的,所以我认为这可能是一个错误。
为了进行测试,我创建了一个自定义提供程序:
public class CustomEFContextProvider : EFContextProvider<NorthwindContext>
{
public CustomEFContextProvider() : base()
{
}
protected override bool BeforeSaveEntity(EntityInfo entityInfo)
{
if(entityInfo.Entity.GetType() == typeof( Category)){
return false;
}
return true;
}
}
并更改了 NorthwindController 以使用它:
readonly CustomEFContextProvider _contextProvider =
new CustomEFContextProvider();
保存类别时我返回 false,因此该类别不会插入数据库中,也不会在 saveResult.entities 数组中返回。keyMappings 也是空的。这一切都是我所期望的。我没想到的是 entitymanager.hasChanges 函数返回 false 因为类别实体被标记为已添加,我认为这让经理不一致。
这是一个错误?我做错了什么?我的期望错了吗?
谢谢。