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
и передайте имя объекта, заданное в качестве второго параметра, иначе результаты не отслеживаются контекстом.