dbContext.ExecuteStoreQuery<t> не сохраняет объекты в dbcontext?

Я использую entityframework 5, и я заметил, что если я загружаю объект из моей базы данных, используя linq, мой объект результата сохраняется в dbcontext, но если я хочу загрузить тот же объект, используя ExecuteStoreQuery, результат не сохраняется в базе данных контекст.

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

1-й путь (LINQ):

var obj = dbcontext.table.where(o=> o.id == queryId).FirstOrDefault();

2-й способ (ExecuteStoreQuery):

var obj = dbcontext.executestorequery("select * from...").FirstOrDefault();

1 ответ

Database в DbContext API не имеет ExecuteStoreQuery - это метод из ObjectContext, DbContext API использует только SqlQuery метод.

Если вы хотите получить то же поведение с собственным SQL, что и с запросом Linq, вы должны использовать:

var obj = dbcontext.table.SqlQuery("select * from ... ");

Разница между звонками SqlQuery прямо на DbContext экземпляр или на DbSet<> Например, в первом случае результат не присоединяется и не отслеживается контекстом, но во втором случае это так.

Если вы используете ObjectContext API, вам нужно использовать перегруженную версию ExecuteStoreQuery и передайте имя объекта, заданное в качестве второго параметра, иначе результаты не отслеживаются контекстом.

Другие вопросы по тегам