我收到此错误:
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(IQueryable
1 源,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。)