Как я могу использовать SQL зарезервированное ключевое слово в названии свойства в контексте данных структуры объекта?
-
10-12-2019 - |
Вопрос
Следующий код бросает исключение « EntitySQLException:« Group »- это зарезервированное ключевое слово и не может использоваться в качестве псевдонима, если только он не сбежит. Ближняя строка 1, столбец 11 ".
Мой вопрос в первую очередь, почему между именем коллекции я выбираю в моем контексте данных и, кажущемся, как генерируется SQL, который генерируется?
А во-вторых, есть ли что-то, что я могу сделать, помимо переименования имущества в моем контексте, чтобы разрешить его (я знаю, что имя глупо, есть причины, почему я не могу изменить имя, так как я хотел бы, чтобыЯ не пойду сюда)?
Есть что-то, что я могу сделать с ModelBuilder, возможно?
.public class GroupEntity
{
public int GroupEntityId { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public MyContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
Group = Set<GroupEntity>();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<GroupEntity>().ToTable("GroupEntities");
base.OnModelCreating(modelBuilder);
}
public DbSet<GroupEntity> Group { get; private set; }
}
//...
using (var ctx = new MyContext("valid connection string"))
{
var e = ctx.Group.Count(a => a.GroupEntityId % 2 == 0);
// Exception thrown here
Console.WriteLine(e);
}
Решение
Это фиксируется в EF 4.3.1 и EF 5.0 Beta1.Пожалуйста, используйте Nuget, чтобы обновить пакет EntityFramework до последней версии.Например, в консоли Manager Package Run:
Update-Package EntityFramework
. Другие советы
Так что через некоторое время смотрят на это, я пришел к выводу, что ответ на мой вопрос заключается в том, что это невозможно.
Это не массивная сделка, так как я могу переименовать свойство, но я думаю, что это то, что должно «просто работать», и поэтому я поднял проблему MS Connect для нее, что можно найти здесь: Использование зарезервированного ключевого слова SQL в качестве названия коллекции на DBContext вызывает исключение .Если это будет разрешено или отклонено, потому что на самом деле возможно, я обновит этот ответ.
Вы всегда можете сделать это множеством, как группы, чтобы сделать его «не зарезервированным» словом.