我刚升级到EF 4.0到6.1。我注意到我正在研究的项目是在一些地方使用ExecuteStoreQuery而在EF 6.1中不支持它。问题是我不完全理解它是怎么回事。 而且我对我应该使用的东西更加无能为力。
所以这是一个例子:
var query = DBContext.ExecuteStoreQuery<sy1>("select * from sy1", "sy1", MergeOption.PreserveChanges).AsQueryable().FirstOrDefault();
是否有一个简单的方法可以在新版本中使用此选项?
答案 0 :(得分:2)
ExecuteStoreQuery
是ObjectContext
的一部分。 DbContext
已作为实体框架4.1的一部分添加,并且仅包装ObjectContext
,因此您可以按如下方式下载到它:
(myContext as IObjectContextAdapter).ObjectContext;
然后您可以像以前一样继续使用现有的ExecuteStoreQuery
来电(这将很容易解决)。
或者(也许更干净)你可以在SqlQuery
(http://msdn.microsoft.com/en-us/library/system.data.entity.database.sqlquery(v=vs.113).aspx)上使用原生DbContext
方法
E.g。像这样的东西:
var query = myContext.Database.SqlQuery<sy1>("select * from sy1").FirstOrDefault();
需要注意的一点是,SqlQuery
中Database
执行的查询未被跟踪。不确定ExecuteStoreQuery
是否属于这种情况,但可能需要注意。如果您需要跟踪,则需要使用SqlQuery
上的等效DbSet
方法。