1

我收到此错误:

System.Data.DataException:初始化数据库时发生异常。有关详细信息,请参阅 InnerException。---> System.Data.EntitySqlException: 'All' 是保留关键字,不能用作别名,除非转义。在 System.Data.Common.EntitySql.CqlLexer.MapIdentifierOrKeyword(String symbol) 在 System.Data.Common.EntitySql.CqlLexer 的 System.Data.Common.EntitySql.CqlLexer.MapUnescapedIdentifier(String symbol) 的第 1 行附近。 yylex() 在 System.Data.Common.EntitySql.CqlParser.yylex() 在 System.Data.Common.EntitySql.CqlParser.yyparse() 在 System.Data.Common.EntitySql.CqlParser.Parse(String query) 在系统。 Data.Common.EntitySql.CqlQuery.Parse(String commandText, ParserOptions parserOptions) 在 System.Data.Common.EntitySql.CqlQuery.CompileCommon(String commandText,

...<剪辑>...

在 System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() at System.Linq.Queryable.Where(IQueryable1 源,Expression`1 谓词)在 All.cs 中的 MyNamespace.All.GetEmptyList():第 35 行

这似乎是由测试类的名称为“全部”引起的。

[TestClass]
public class All : Service
{
    [TestMethod]
    public void GetEmptyList()
    {
        var actualList = MyItems.Where(item => item.Id < 0);
    }
}

MyItems属性是Service基类的公共属性:

public IQueryable<MyItem> MyItems
{
    get { return Set<MyItem>(); }
}

我假设我的类名正在转换为 ESQL 类型,这会将其转换为保留字。但是,我对此没有(直接)控制权,并且由于 ESQL 和 TSQL 不是我关心的问题,我认为这个问题不应该冒泡,特别是因为我不知道我能做些什么,除了从重命名我的班级(如果我将其更改为“All2”,一切正常。)

为什么表达式解析器(无论具体在哪里,可能是ExpressionConverter.Convert()or TranslateInlineQueryOfT)不会自动转义保留字?

有没有办法可以解决这个问题?更改类名是一种技巧。

(使用 .NET 4、EF 4.1 运行代码优先,针对 MS SQL 2008 R2。)

4

1 回答 1

0

实际上,更改类名将对可理解性有很大帮助。

都是什么?

实体框架是通用的,它将从哪里获取保留字列表以及如何获取。如果有修复,我怀疑它将是转义或映射类名以在后端使用的属性。无论如何,我都会这样做。

于 2011-11-16T11:42:36.943 回答