代码之家  ›  专栏  ›  技术社区  ›  Buu

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

  •  3
  • Buu  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  8
  •   Buu    16 年前

    我知道怎么做了。基本上,我们可以截获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<RuleViolation>();
            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);
        }
    
        2
  •  0
  •   Craig Stuntz    16 年前

    好的,你可以这样做,但这意味着你允许你的客户直接访问ObjectContext,就我个人而言,我喜欢把它抽象出来,以使客户更易于测试。