繁体   English   中英

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

[英]dbContext.ExecuteStoreQuery<t> does not store objects on dbcontext?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM