实体框架实体完整性

3
我希望在保存时验证每个实体。也就是说,我在每个实体类中有一些自定义的C#函数来验证数据。

我该怎么做呢?我不想使用数据库约束,因为它们无法表达我的约束条件。

我应该实现一些接口吗?


你使用的是哪个框架?有些框架允许你在类中设置模型约束。如果你使用像EF Code-First这样的东西,那么你可以轻松地编写你的类并添加验证。 - Yet Another Geek
请查看以下答案:http://stackoverflow.com/questions/6277063/best-practise-for-validating-entity-framework-entities-in-asp-net-mvc-3-using-a-r/6277207#6277207 - Eranga
2个回答

4

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方法。


4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接