Надежный способ запуска кода против сущностей, только что вставленных с ObjectContext? - PullRequest
1 голос
/ 07 июня 2011

У меня есть код, который нужно запускать каждый раз, когда Entity вставляется в мою базу данных, проблема в том, что этот код требует Entity PrimaryKey.
Я обнаружил, что могу получить Entities из ObjectStateManager с EntityState.Unchanged, и это мой объект после Insert, но я не уверен, всегда ли это будут единственные объекты с «Unchanged» в качестве их EntityState в ObjectContext.

Есть ли надежный способ запуска кода только для объектов, которые ПРОСТО были вставлены с ObjectContext?

1 Ответ

1 голос
/ 07 июня 2011

Да, есть способ. Вы должны вызвать перегруженный SaveChanges, который не будет принимать изменения после автоматического сохранения, и вместо этого вы будете отвечать за вызов AcceptAllChanges. В этом сценарии объекты будут по-прежнему в состоянии «Добавлено» после вызова SaveChanges (но только до тех пор, пока вы не вызовете AcceptAllChanges). Общий код должен выглядеть так:

using (var scope = new TransactionScope(...))
{
    context.SaveChanges(SaveOptions.DetectChangesBeforeSave);

    // Run your code here

    context.AcceptAllChanges();
    scope.Complete();
}

Область транзакции не обязательна - это всего лишь пример подхода, если вы публикуете код вставки, который должен выполняться в транзакции с вставкой.

Вы также можете заключить этот код в переопределенный SaveChanges, чтобы иметь его в централизованном месте.

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