Целостность сущности Entity Framework - PullRequest
3 голосов
/ 18 июня 2011

Я хочу проверить каждую сущность при сохранении.То есть у меня есть какая-то пользовательская функция C # в каждом классе сущности, которая проверяет данные.

Как я могу это сделать?Я не хочу использовать ограничения базы данных, потому что они не могут выразить мои ограничения.

Должен ли я реализовать какой-то интерфейс ???

Ответы [ 2 ]

4 голосов
/ 18 июня 2011

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 голосов
/ 18 июня 2011

Метод ObjectContext.SaveChanges является виртуальным начиная с EF 4.0.Переписать этот метод и проверить все сущности там.

http://msdn.microsoft.com/en-us/library/dd395500.aspx

Итерация по всем объектам (не удаленным :)) в контексте.Используйте ObjectStateManager для получения доступа к объектам в контексте.

Надеюсь, что это поможет и наилучшими пожеланиями,

http://www.testmaster.ch/EntityFramework.test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...