Что происходит с моим DbContext после запуска хранимой процедуры, которая меняет мои сущности?

c# dbcontext entity-framework entity-framework-6 stored-procedures

Вопрос

Сценарий : у меня есть пользовательский DbContext . Я использую свойство StoreConnection объекта ObjectContext для запуска хранимой процедуры, которая модифицирует несколько объектов (которые имеют DbSet в моем настраиваемом DbContext ). Мой DbContext и репозитории поставляются Unity v3.

Пример :

private MyContext _ctx;
private IGenericRepository<Foo>();
private IGenericRepository<Bar>();

public void DoSomethingFooAndBar()
{
    var connection = _ctx.StoreConnection; //Exposed ObjectContext.StoreConnection in my custom context
    using (var cmd = connection.CreateCommand())
    {
        command.CommandText = "dbo.ModifyFooAndBar";
        command.CommandType = CommandType.StoredProcedure;
        command.ExecuteNonQuery();
    }
    //What is the state of my DbSet<Foo> and DbSet<Bar>?
}

Вопрос : DbContext ли я риск наличия устаревшего DbContext после этой хранимой процедуры, и если да, то как мне заставить его DbContext от него и создать новый?

Принятый ответ

В этот момент DbContext будет устаревшим, если вы продолжите использовать его после запуска хранимой процедуры. В соответствии с этим ответом ( https://stackoverflow.com/a/18830466/3294324 ) вы можете обновить свой контекст, не создавая новый.

Вы можете попробовать что-то вроде этого:

var Context = ((IObjectContextAdapter)_ctx).ObjectContext;
Context.Refresh(RefreshMode.StoreWins, Context.ObjectStateManager.GetObjectStateEntries());


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему