在实体框架中明确触发验证

时间:2014-03-27 08:13:57

标签: entity-framework validation ef-code-first fluent explicit

我正在使用Entity Framework 6和Unit of Work Repository模式。我使用流畅的API将所有实体映射到数据库。以及需要满足的验证条件。

现在我正在寻找一种明确地为每个实体调用验证的方法,我在页面上找到了一篇博文http://msdn.microsoft.com/en-us/data/gg193959.aspx(参见"明确触发验证")部分。

我试图调用Context.GetValidationErrors()但它没有验证使用流畅api定义的任何规则。

所以,如果有人对此有任何想法,请随时回答:)

非常感谢。

 public AM_AssetLayoutsConfiguration(string schema = "dbo")
    {
        ToTable(schema + ".AM_AssetLayouts");
        HasKey(x => x.ID);

        Property(x => x.ID).HasColumnName("ID").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.Name).HasColumnName("Name").IsRequired().HasMaxLength(50);
        Property(x => x.IncludePCFields).HasColumnName("IncludePCFields").IsRequired();
        Property(x => x.DisplayOrder).HasColumnName("DisplayOrder").IsRequired();
        Property(x => x.Active).HasColumnName("Active").IsRequired();
        Property(x => x.CreatedByID).HasColumnName("CreatedByID").IsRequired();
        Property(x => x.CreatedDate).HasColumnName("CreatedDate").IsRequired();
        Property(x => x.ModifiedByID).HasColumnName("ModifiedByID").IsOptional();
        Property(x => x.ModifiedDate).HasColumnName("ModifiedDate").IsOptional();
        Property(x => x.DeletedByID).HasColumnName("DeletedByID").IsOptional();
        Property(x => x.DeletedDate).HasColumnName("DeletedDate").IsOptional();
        Property(x => x.Deleted).HasColumnName("Deleted").IsRequired();

        InitializePartial();

这是我流畅的API映射。

foreach (var validationResults in dbContext.GetValidationErrors()) 
{ 
    foreach (var error in validationResults.ValidationErrors) 
    { 
        Debug.WriteLine( 
                          "Entity Property: {0}, Error {1}", 
                          error.PropertyName, 
                          error.ErrorMessage); 
    } 
}

以下是根据博客文章调用validate方法的代码。

将实体附加到db上下文的更新:

repository.EntityDbSet.Add(entity);

                DbEntityValidationResult validationResult = repository.DbContext.Entry<TEntity>(entity).GetValidationResult();

                if (validationResult.IsValid == false)
                {
                    entityValidationResults.IsValid = false;

                    foreach (DbValidationError validationError in validationResult.ValidationErrors)
                    {
                        entityValidationResults.ValidationErrors.Add(new EntityValidationError() { PropertyName = validationError.PropertyName, ErrorMessage = validationError.ErrorMessage });
                    }
                }

0 个答案:

没有答案