我希望在保存时验证每个实体。也就是说,我在每个实体类中有一些自定义的C#函数来验证数据。
我该怎么做呢?我不想使用数据库约束,因为它们无法表达我的约束条件。
我应该实现一些接口吗?
我该怎么做呢?我不想使用数据库约束,因为它们无法表达我的约束条件。
我应该实现一些接口吗?
Entity Framework 3.5和4.0提供了一个称为SavingChanges
的功能。Entity Framework 4.0和4.1有一个虚拟的SaveChanges
方法(如前所述)。
您可以覆盖方法或使用事件处理程序,并像以下代码一样编写3.5和4.0版本的代码:
var entities = context.ObjectStateManager
.GetObjectStateEntries(EntitiState.Modified | EntityState.Added)
.Where(e => !e.IsRelationship)
.Select(e => e.Entity)
.OfType<YourEntityType>();
foreach(var entity in entities)
{
entity.Validate();
}
在DbContext API(EF 4.1)中,您必须使用
var entities = context.ChangeTracker
.Entries<YourEntityType>()
.Where(e.State == EntityState.Added || e.State == EntityState.Modified)
.Select(e => e.Entity);
foreach(var entity in entities)
{
entity.Validate();
}
您可以使用实体实现的自定义接口,该接口将公开Validate
方法。
自EF 4.0起,ObjectContext.SaveChanges方法是虚拟的。覆盖此方法并在其中验证所有实体。
http://msdn.microsoft.com/en-us/library/dd395500.aspx
在上下文中迭代所有实体(不包括已删除的实体: ))。使用ObjectStateManager访问上下文中的实体。
希望这可以帮到您,祝好!