当前位置:  开发笔记 > 编程语言 > 正文

使用ADO.NET实体框架拦截实体保存

如何解决《使用ADO.NET实体框架拦截实体保存》经验,为你挑选了1个好方法。

我想在实体对象内部使用ObjectContext#SaveChanges()存储验证函数.现在,我可以自己跟踪所有已更改的对象,然后循环遍历所有这些对象并调用它们的验证方法,但我想更简单的方法是实现ObjectContext在保存每个实体之前将调用的一些回调.后者可以完成吗?还有其他选择吗?



1> Buu Nguyen..:

我已经弄明白了.基本上,我们可以拦截ObjectContext的SavingChanges事件并循环通过新添加/修改的实体来调用它们的验证函数.这是我使用的代码.

    partial void OnContextCreated()
    {
        SavingChanges += PerformValidation;
    }

    void PerformValidation(object sender, System.EventArgs e)
    {
        var objStateEntries = ObjectStateManager.GetObjectStateEntries(
            EntityState.Added | EntityState.Modified);

        var violatedRules = new List();
        foreach (ObjectStateEntry entry in objStateEntries)
        {
            var entity = entry.Entity as IRuleValidator;
            if (entity != null)
                violatedRules.AddRange(entity.Validate());
        }
        if (violatedRules.Count > 0)
            throw new ValidationException(violatedRules);
    }

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有