EF 4.0,什么是ExecuteStoreQuery,我应该使用哪些新版本的EF

时间:2014-08-07 09:19:48

标签: c# entity-framework

我刚升级到EF 4.0到6.1。我注意到我正在研究的项目是在一些地方使用ExecuteStoreQuery而在EF 6.1中不支持它。问题是我不完全理解它是怎么回事。 而且我对我应该使用的东西更加无能为力。

所以这是一个例子:

var query = DBContext.ExecuteStoreQuery<sy1>("select * from sy1", "sy1", MergeOption.PreserveChanges).AsQueryable().FirstOrDefault();

是否有一个简单的方法可以在新版本中使用此选项?

1 个答案:

答案 0 :(得分:2)

ExecuteStoreQueryObjectContext的一部分。 DbContext已作为实体框架4.1的一部分添加,并且仅包装ObjectContext,因此您可以按如下方式下载到它:

(myContext as IObjectContextAdapter).ObjectContext;

然后您可以像以前一样继续使用现有的ExecuteStoreQuery来电(这将很容易解决)。

或者(也许更干净)你可以在SqlQueryhttp://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();

需要注意的一点是,SqlQueryDatabase执行的查询未被跟踪。不确定ExecuteStoreQuery是否属于这种情况,但可能需要注意。如果您需要跟踪,则需要使用SqlQuery上的等效DbSet方法。