我可以访问 EF 6 Fluent API 元数据以便我可以在 Entity Framework 之前验证我的保存吗?

Can I have access to the EF 6 Fluent API metadata so I can validate my saves prior to Entity Framework?

我正在使用 Entity Framework 6,POCO,Code First。

在我的 DbContextOnModelCreating 上,我使用 modelBuilder 参数来设置各种元数据,例如我的字段是否必填、最大长度等等。

// please ignore syntax errors. I'm writing this by heart
public void OnModelCreating(ModelBuilder modelBuilder) 
{
    modelBuilder.Entity<Contact>().Property(m => m.Name).IsRequired().HasMaxLength(30);
}

但是,我有一个 ContactsService,它有一个名为 Save 的方法。 Save 调用一个名为 ValidateSave.

的内部方法

问题是: 我可以轻松地手动实现 ValidateSave 方法。那会很有效。但我真的想要一种方法来重用我在 OnModelCreating 方法上设置的所有配置。

我知道,如果我调用 SaveChanges,EF 的验证将触发包含我需要的所有信息的异常。但是,我正在模拟存储库层,因此我不能依赖单元测试中的这些异常。

问题: 我可以访问 Entity Framework Fluent API 元数据以便我可以在 Entity Framework 之前验证我的保存吗?

您可以使用GetValidationResult方法:

using (var context = new MyContext())
{
    var myEntity = new MyEntity();

    var validationResult = context.Entry<MyEntity>(myEntity).GetValidationResult();
}