我正在寻找关于在从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,因为类别实体被标记为已添加,在我看来我的经理不一致。
这是一个错误吗?我做错了什么?我的期望错了吗?
THX。
答案 0 :(得分:1)
好的,从v 1.2.5(刚发布)开始,这应该是固定的。请回复确认是否可能,以及错误报告的thx。 :)
答案 1 :(得分:0)
EntityManager.hasChanges返回true的原因是你没有保存“添加的”Category对象,因此breeze不会在其上调用 EntityAspect.acceptChanges ,因为它实际上仍然是处于“增加的”但不可保存的状态。
我认为这实际上是正确的行为,因为如果我们要在此实体上自动调用acceptChanges,您将永远不会在客户端上知道它尚未保存。您当然可以直接在promise回调中调用acceptChanges。
这有意义吗?