9

以下代码抛出异常“ EntitySqlException: 'Group' 是保留关键字,不能用作别名,除非它被转义。靠近第 1 行,第 11 列”。

我的问题首先是为什么我在数据上下文中选择的集合名称与生成的 sql 查询之间存在任何关系?

其次,除了在我的上下文中重命名属性之外,我能做些什么来解决它(我知道这个名字很愚蠢,有一些原因我不能改变这个名字,就像我想的那样,我赢了'不要进入这里)?

有什么我可以用模型构建器做的吗?

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

3 回答 3

1

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

这不是什么大问题,因为我可以重命名该属性,但我认为它应该“正常工作”,所以我提出了一个 MS 连接问题,可以在这里找到:使用 sql 保留关键字作为名称DbContext 上的集合会导致异常。如果这得到解决或被拒绝,因为实际上有可能我会更新这个答案。

于 2012-03-12T06:48:59.067 回答
1

这在 EF 4.3.1 和 EF 5.0 beta1 中已修复。请使用 NuGet 将 EntityFramework 包更新到最新版本。例如,在包管理器控制台中,运行:

Update-Package EntityFramework
于 2012-03-12T18:04:29.997 回答
0

您总是可以将其设为复数,例如 Groups 将其设为“非保留”词。

于 2012-03-10T19:36:38.283 回答