我使用的是实体框架6,POCO,代码优先。
在我的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();
}