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();
});
});
そして、2 つの主張が正しいことがわかったので、バグである可能性があると思います。
テストを行うために、カスタム プロバイダーを作成しました。
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 を返すことです。私の意見では、マネージャーに一貫性がありません。
バグですか?私は何か間違ったことをしていますか?私の期待は間違っていましたか?
どうも。