“组”是保留关键字,除非被转义,否则不能用作别名

时间:2011-09-26 18:12:15

标签: sql-server entity-framework reserved-words

我正在使用Entity Framework 4.1和存储库模式(数据库已经存在)。 我的问题是存在一个名为GROUP的表(保留)。这是一个我无法改变的生产数据库。

所以,使用上面的所有这些技术我得到以下错误:

'Group'是保留关键字,除非被转义,否则不能用作别名。

是否可以告诉Entity Framework使用以下作为表名: [组]

修改 具有db上下文的类看起来如下(剥离)

 public class AMTDatabase : DbContext
    {

      private IDbSet<GROUP> _Groups;
      public IDbSet<GROUP> Group
      {
        get { return _Groups ?? (_Groups = DbSet<GROUP>()); }
      }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {        
      base.OnModelCreating(modelBuilder);
      modelBuilder.Entity<GROUP>().ToTable("GROUP");      
    }
    //etc
    }

提前致谢

2 个答案:

答案 0 :(得分:1)

好吧看起来很奇怪,但请注意上面的属性名称:名称是Group,它应该读取组!这就是我收到此错误的原因。更正后的代码如下:

private IDbSet<GROUP> _Groups;
        public IDbSet<GROUP> Groups
        {
            get { return _Groups ?? (_Groups = DbSet<GROUP>()); }
        }

现在就像魅力一样!

答案 1 :(得分:0)

尝试为您的类使用另一个命名并告诉他在数据库中使用Group表,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{        
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<MyGroup>().ToTable("GROUP");      
}

或直接在您的实体类上使用属性:

[Table("Group")]
public class MyGroup
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column("GroupId")]
    public int GroupId { get; set; }
}