Как я могу использовать зарезервированное ключевое слово sql в имени свойства в контексте данных каркаса сущности? - PullRequest
9 голосов
/ 09 марта 2012

Следующий код выдает исключение « EntitySqlException:« Группа »является зарезервированным ключевым словом и не может использоваться в качестве псевдонима, если не экранирован. Рядом со строкой 1, столбец 11 ».

Мой вопрос, во-первых, почему существует какое-либо отношение между именем коллекции, которое я выбираю в контексте данных, и, смотри, сгенерированный SQL-запрос?

И во-вторых, могу ли я что-то сделать, кроме переименования свойства в моем контексте, чтобы разрешить его (я знаю, что имя глупое, есть причины, по которым я не могу изменить имя, как бы мне этого ни хотелось, Я не буду вдаваться здесь)?

Могу ли я что-нибудь сделать с моделью Builder?

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);
}

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Итак, через некоторое время, глядя на это, я пришел к выводу, что ответ на мой вопрос заключается в том, что это невозможно.

Это не большое дело, так как я могу переименовать свойство, но я думаю, что это то, что должно "просто работать", и поэтому я поднял проблему MS connect для этого, которую можно найти здесь: Использование зарезервированного ключевого слова sql в качестве имени коллекции в DbContext вызывает исключение .Если это будет решено или отклонено, потому что это действительно возможно, я обновлю этот ответ.

1 голос
/ 12 марта 2012

Это исправлено в EF 4.3.1 и EF 5.0 beta1. Пожалуйста, используйте NuGet для обновления пакета EntityFramework до последней версии. Например, в консоли диспетчера пакетов выполните:

Update-Package EntityFramework
0 голосов
/ 10 марта 2012

Вы всегда можете сделать это во множественном числе, например, группы, чтобы сделать это слово "незарезервированным".

...