如何在实体框架数据上下文中的属性名称中使用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);
}
这在EF 4.3.1和EF 5.0 beta1中是固定的。请使用NuGet将EntityFramework包更新到最新版本。例如,在Package Manager控制台中,运行:
Update-Package EntityFramework
因此,经过一段时间的研究,我得出结论,我的问题的答案是不可能的。
这不是一笔大交易,因为我可以重新命名这处房产,但我认为这是一件应该"只是工作;因此,我为它提出了一个MS连接问题,可以在这里找到:在DbContext上使用sql保留关键字作为集合的名称会导致异常。如果这个问题得到解决或被拒绝,因为它实际上是可能的,我会更新这个答案。
更新:此问题现已解决。请参阅已接受的答案。
您可以将它设为复数,就像Groups将其设为"非保留"字一样。