有没有办法绕过ESQL&使用自己的sql生成?

时间:2013-12-19 19:14:09

标签: c# linq entity-framework-6

根据我的理解,EF LINQ生成ESQL&相应的SQL驱动程序会将ESQL转换为目标SQL。在这种情况下,它看起来像两个步骤&它也非常受限制。无法轻松调用任何自定义SQL命令。

EF的所有功能都很好,我想绕过ESQL&从LINQ生成目标SQL。

EF6定制提供商可以吗?还是我离开了重新发明轮子&写一个全新的框架?

我不是在询问文字SQL,而是在讨论实现实体的IQueryable。

2 个答案:

答案 0 :(得分:1)

如果您访问上下文,则可以像这样直接针对Connection编写SQL。

var selectSomeData = Context.Databas.SqlQuery<string>("select * from foo").ToList();

这里有一些参考http://msdn.microsoft.com/en-us/data/jj592907.aspx

答案 1 :(得分:1)

这实际上是不正确的。 EF不会将Linq转换为ESQL。而不是创建传递给提供程序以转换为Sql的DbCommandTree。已经说过Linq表达式树目前不能公开访问。正在跟踪此here - 随时可以对此工作项进行投票。

请注意,传递给提供程序的DbCommandTree更适合转换为SQL,因为它会处理一些事情,例如“展平”类型(即删除复杂类型)或翻译不存在的类型DB(例如枚举)到Db可以理解的等价物。处理的另一个目标是为实体准备结果的具体化。我认为只要将Linq表达式转换为SQL(不知何故)就可以使用EF。对我来说,听起来你只需要创建一个linq提供程序,它可以将Linq转换为Sql查询和命令,而不需要整个EF行李。如果这就是你所追求的,你应该看看Matt Warren的Building a LINQ IQueryable provider series谁展示了如何做到这一点。