如何在实体框架数据上下文中的属性名称中使用sql保留关键字

本文关键字:关键字 保留 sql 属性 实体 框架 上下文 数据 | 更新日期: 2023-09-27 18:27:25

以下代码引发异常"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);
}

如何在实体框架数据上下文中的属性名称中使用sql保留关键字

这在EF 4.3.1和EF 5.0 beta1中是固定的。请使用NuGet将EntityFramework包更新到最新版本。例如,在Package Manager控制台中,运行:

Update-Package EntityFramework

因此,经过一段时间的研究,我得出结论,我的问题的答案是不可能的。

这不是一笔大交易,因为我可以重新命名这处房产,但我认为这是一件应该"只是工作;因此,我为它提出了一个MS连接问题,可以在这里找到:在DbContext上使用sql保留关键字作为集合的名称会导致异常。如果这个问题得到解决或被拒绝,因为它实际上是可能的,我会更新这个答案。


更新:此问题现已解决。请参阅已接受的答案。

您可以将它设为复数,就像Groups将其设为"非保留"字一样。