我正在使用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 });
}
}