使用Firebird的实体框架会引发动态SQL错误

时间:2014-12-23 12:35:52

标签: entity-framework-6 firebird2.1

我遇到了FbException

  

SQL错误代码= -104

     

令牌未知 - 第2行,第4列

     

尝试运行此代码时

var result = from x in _context.Bunts
                         select x;

我检查了由EF

生成的查询
SELECT 
"A"."BUNTCODE" AS "BUNTCODE", 
"A"."BUNTNAME" AS "BUNTNAME", 
"A"."BUNTDIAM" AS "BUNTDIAM"
FROM "BUNTS" AS "A"

所以服务器认为“A”语句后点有问题。但是这个查询在同一台机器上的IBExpert中运行得很好。如何解决这个问题?

我正在使用:

  

Firebird服务器v2.1.6.18547

     

EntityFramework v6.0.0.0

     

EntityFramework.Firebird v4.5.2.0

     

FirebirdSql.Data.FirebirdClient 4.5.2.0

1 个答案:

答案 0 :(得分:1)

错误表明您正在使用方言1进行连接。方言1是Interbase 5及更早版本的旧方言,应该被视为已弃用(尽管不幸的是,Firebird还支持15年......)。

在方言1中,不能引用对象名称,双引号用于字符串(而不是方言3和SQL标准中的单引号)。当您在方言1中解析查询时,Firebird将"A"视为字符串常量,并且解析器不期望使用以下点(.)。

切换到方言3应该解决这个问题,但是如果这样做,请确保您的数据库本身也是方言3,否则您可能会遇到其他意外行为,例如某些数据类型不起作用或错误等。