我可以访问 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。
在我的 DbContext
的 OnModelCreating
上,我使用 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();
}
我正在使用 Entity Framework 6,POCO,Code First。
在我的 DbContext
的 OnModelCreating
上,我使用 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();
}