Я получаю эту ошибку:
System.Data.DataException: исключение произошло при инициализации базы данных.Смотрите InnerException для подробностей.---> System.Data.EntitySqlException: «Все» является зарезервированным ключевым словом и не может использоваться в качестве псевдонима, если его не экранировать.Рядом со строкой 1, столбец 1. в System.Data.Common.EntitySql.CqlLexer.MapUnescapedIdentifier (символ String) в System.Data.Common.EntitySql.CqlLexer.MapIdentifierOrKeyword (символ String) в System.Data.Common.EerqSl.yylex () в System.Data.Common.EntitySql.CqlParser.yylex () в System.Data.Common.EntitySql.CqlParser.yyparse () в System.Data.Common.EntitySql.CqlParser.Parse (строковый запрос) в системе.Data.Common.EntitySql.CqlQuery.Parse (String commandText, ParserOptions parserOptions) в System.Data.Common.EntitySql.CqlQuery.CompileCommon (String commandText, Перспективная перспектива, ParserOptions parserOptions, Функц.EntitySqlQueryState.Parse () в System.Data.Objects.ELinq.ExpressionConverter.TranslateInlineQueryOfT (ObjectQuery inlineQuery) в System.Data.Objects.ELinq.ExpressionConverter.ConstantTranslator.TypedTranslate, выражение для объекта Conject..ExpressionConverter.TranslateExpression(Выражение linq)
... ...
в источнике System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider()
at System.Linq.Queryable.Where(IQueryable
1, предикат Expression`1) в MyNamespace.All.GetEmptyList () в All.cs: строка 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()
или TranslateInlineQueryOfT
) автоматически не экранирует зарезервированные слова?
Есть ли способ, как я могу решить эту проблему?Изменение имени класса является хаком.
(Запуск кода в первую очередь в .NET 4, EF 4.1 против MS SQL 2008 R2.)