1

次のエラーが表示されます。

System.Data.DataException: データベースの初期化中に例外が発生しました。詳細については、InnerException を参照してください。---> System.Data.EntitySqlException: 'All' は予約済みのキーワードであり、エスケープしない限りエイリアスとして使用できません。行 1、列 1 付近。 System.Data.Common.EntitySql.CqlParser.yylex() の System.Data.Common.EntitySql.CqlParser.yyparse() の yylex() System.Data.Common.EntitySql.CqlParser.Parse(String query) の System. 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 行目

これは、テスト クラスの名前が「All」であることが原因のようです。

[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) が予約語を自動的にエスケープしないのはなぜですか?

この問題を解決する方法はありますか? クラス名の変更はハックです。

(MS SQL 2008 R2 に対して、.NET 4、EF 4.1 でコード ファーストを実行します。)

4

1 に答える 1