EF4 - Sproc обновляет данные, но данные не обновляются в EF - PullRequest
0 голосов
/ 21 марта 2012

Я использую EF4 для веб-приложения.

99% времени я использую LINQ to EF для доступа к данным, однако один из вызовов должен быть спроком.Это выглядит следующим образом:

object[] params = { new SqlParameter("SomeId", someId),
                    new SqlParameter("OtherId", otherId)};
db.Database.ExecuteSqlCommand("dbo.spMySproc @SomeId, @OtherId", parms);
db.SaveChanges();

Sproc запускается, данные обновляются.Однако, когда данные EF не обновляются.Я узнал, что это ожидаемое поведение .Я также узнал , что в ObjectContext есть метод .Refresh , однако мой объект сущностей базы данных наследуется от DbContext , который не имеет этого.

Есть ли способ обновить базу данных EF4 после запуска этого sproc?

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Кейси более или менее прав, но вы не можете получить к нему доступ, как он указывает.Вы преобразовали DbContext в IObjectContextAdapter, после чего вы можете получить доступ к ObjectContext из этого.

var oc = myContext as IObjectContextAdapter;
if (oc != null)    
     oc.ObjectContext.Refresh()

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

using(var db = new MyDbContext()) {
    object[] params = { new SqlParameter("SomeId", someId),  
                new SqlParameter("OtherId", otherId)};  
    db.Database.ExecuteSqlCommand("dbo.spMySproc @SomeId, @OtherId", parms);  
    //db.SaveChanges();  - This is irrelevant
}
1 голос
/ 21 марта 2012

Документация для DbContext гласит следующее:

"DbContext оборачивает ObjectContext и предоставляет наиболее часто используемые функции ObjectContext с помощью упрощенных и более интуитивно понятных API. Вы можете получить доступ к базовому ObjectContext, когда вам нужно использовать функции, которыене поддерживаются DbContext. Для получения дополнительной информации см. Что не поддерживается. "

Что заставляет меня думать, что вы могли бы сделать что-то вроде:

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