dbContext.ExecuteStoreQuery <t>不在dbcontext上存储对象?</t>

时间:2012-12-12 12:17:47

标签: c# entity-framework-5 dbcontext executequery

我正在使用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();

1 个答案:

答案 0 :(得分:1)

DbContext API中的

Database没有ExecuteStoreQuery - 这是来自ObjectContext的方法。 DbContext API仅使用SqlQuery方法。

如果您希望使用本机SQL获得与Linq查询相同的行为,则必须使用:

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

直接在SqlQuery实例或DbContext实例上调用DbSet<>之间的区别在于,在第一种情况下,结果未被上下文附加和跟踪,但在第二种情况下,它是

如果您使用的是ObjectContext API,则需要使用ExecuteStoreQuery的重载版本,并将实体集的名称作为第二个参数传递,否则上下文不会跟踪结果。