Sql server ';集团';是保留关键字,除非转义,否则不能用作别名
我正在使用EntityFramework4.1和repository模式(数据库已经存在)。 我的问题是存在一个名为GROUP(保留)的表。这是一个我无法更改的生产数据库 因此,使用上述所有技术,我得到以下错误: “Group”是保留关键字,除非转义,否则不能用作别名 是否可以告诉Entity Framework使用以下名称作为表名: [小组] 编辑 具有db上下文的类如下所示(精简)Sql server ';集团';是保留关键字,除非转义,否则不能用作别名,sql-server,entity-framework,reserved-words,Sql Server,Entity Framework,Reserved Words,我正在使用EntityFramework4.1和repository模式(数据库已经存在)。 我的问题是存在一个名为GROUP(保留)的表。这是一个我无法更改的生产数据库 因此,使用上述所有技术,我得到以下错误: “Group”是保留关键字,除非转义,否则不能用作别名 是否可以告诉Entity Framework使用以下名称作为表名: [小组] 编辑 具有db上下文的类如下所示(精简) 公共类AMTDatabase:DbContext { 私有IDbSet_组; 公共IDbSet组 { 获取{r
公共类AMTDatabase:DbContext
{
私有IDbSet_组;
公共IDbSet组
{
获取{return\u Groups???(\u Groups=DbSet());}
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().ToTable(“组”);
}
//等
}
提前感谢看起来很奇怪,但是请注意上面的属性名称:名称是Group,应该是Groups!这就是我出错的原因。更正的代码如下所示:
private IDbSet<GROUP> _Groups;
public IDbSet<GROUP> Groups
{
get { return _Groups ?? (_Groups = DbSet<GROUP>()); }
}
私有IDbSet\u组;
公共集组
{
获取{return\u Groups???(\u Groups=DbSet());}
}
现在真是魅力四射 尝试为您的类使用另一个命名,并告诉他使用数据库中的组表,如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyGroup>().ToTable("GROUP");
}
谁给了你这个错误?它是在Visual Studio中还是在您的数据库中?你能发布你的类中有问题的代码吗?@AlexandreJobin:我在VS中发现了错误。请参阅编辑。刚刚发现了相同的错误,结果对我来说很奇怪。即使使用
context.Set().ToList()
也有效,但context.Group.ToList()
无效。奇怪…那么这是什么意思。。。我糊涂了!我们不能为DBSet选择任何我们想要的名称吗?所以它看起来像。我刚刚测试过如何给DbSet
命名,比如Select
、Join
和Where
。它们都抛出相同的异常。EF似乎在对照SQL关键字列表进行检查。实体名称组本身不是问题。你说得对!查看映射指令后,我们知道实体名称可以是。。。无论什么但DBSet不能。嗯,今天学到了一些新东西!!非常感谢!
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; }
}