使用DbContext进行Entity-Sql查询

时间:2014-07-15 15:12:32

标签: .net entity-framework dbcontext objectcontext

将实体框架项目从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]);
    }
}

(其中AdventureWorksEntitiesObjectContext。)

迁移到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查询字符串。)

0 个答案:

没有答案