将实体框架项目从ObjectContext
迁移到DbContext
,我发现无法直接使用DbContext
执行E-Sql查询字符串。 (Entity-SQL不是SQL,而是类似SQL的查询语言,请参阅此msdn reference)。
以前的代码就像关注msdn example:
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
string myQuery = @"SELECT p.ProductID, p.Name FROM
AdventureWorksEntities.Products as p";
foreach (DbDataRecord rec in
new ObjectQuery<DbDataRecord>(myQuery, context))
{
Console.WriteLine("ID {0}; Name {1}", rec[0], rec[1]);
}
}
(其中AdventureWorksEntities
是ObjectContext
。)
迁移到DbContext
后,我们仍然可以通过达到下面的底层对象上下文来执行E-SQL查询:
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
string myQuery = @"SELECT p.ProductID, p.Name FROM
AdventureWorksEntities.Products as p";
foreach (DbDataRecord rec in
new ObjectQuery<DbDataRecord>(myQuery,
((IObjectContextAdapter)context).ObjectContext))
{
Console.WriteLine("ID {0}; Name {1}", rec[0], rec[1]);
}
}
(AdventureWorksEntities
现在是DbContext
。)
这确实有效。但是,由于我宁愿限制我使用的API数量,有没有办法直接从DbContext
执行E-SQL查询而无需明确地到达基础ObjectContext
?
(顺便说一下,没有使用ObjectQuery
。我知道我可以轻松地将这些示例转换为使用其他查询解决方案,如Linq-to-Entity,但我目前的用例现在需要使用E- SQL查询字符串。)