0

我正在使用 entityframework 5,我注意到如果我使用 linq 从我的 db 加载一个对象,我的结果对象将存储在 dbcontext 中,但是如果我想使用 ExecuteStoreQuery 加载相同的对象,则结果不会存储在 db语境。

这是预期的行为吗?或者我能做些什么来维护secon way查询con dbcontext的结果?

第一种方式(LINQ):

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

第二种方式(ExecuteStoreQuery):

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

1 回答 1

1

Database在 DbContext API 中没有ExecuteStoreQuery- 这是来自ObjectContext. DbContext API 只使用SqlQuery方法。

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

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

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

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

于 2012-12-12T12:35:11.463 回答