我正在使用entityframework 5,我注意到如果我使用linq从我的数据库加载一个对象,我的结果对象存储在dbcontext上,但是如果我想使用ExecuteStoreQuery加载相同的对象,结果不是存储在db上下文中。
这是预期的行为吗?或者我该怎么做才能维护secon方式查询con dbcontext的结果?
第一路(LINQ):
var obj = dbcontext.table.where(o=> o.id == queryId).FirstOrDefault();
第二路(ExecuteStoreQuery):
var obj = dbcontext.executestorequery("select * from...").FirstOrDefault();
答案 0 :(得分:1)
Database
没有ExecuteStoreQuery
- 这是来自ObjectContext
的方法。 DbContext API仅使用SqlQuery
方法。
如果您希望使用本机SQL获得与Linq查询相同的行为,则必须使用:
var obj = dbcontext.table.SqlQuery("select * from ... ");
直接在SqlQuery
实例或DbContext
实例上调用DbSet<>
之间的区别在于,在第一种情况下,结果未被上下文附加和跟踪,但在第二种情况下,它是
如果您使用的是ObjectContext API,则需要使用ExecuteStoreQuery
的重载版本,并将实体集的名称作为第二个参数传递,否则上下文不会跟踪结果。