如何在实体框架数据上下文中的属性名称中使用SQL Reserved关键字?
-
10-12-2019 - |
题
以下代码抛出异常“ entitysqlexception:'group'是保留关键字,不能用作别名,除非它被转义。近线1,第11列”。
我的问题首先是为什么我在我的数据上下文上选择的集合名称之间存在任何关系,并且evenInly生成的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);
}
解决方案
这在EF 4.3.1和EF 5.0 Beta1中固定。请使用Nuget将EntityFramework包更新为最新版本。例如,在包管理器控制台中,运行:
Update-Package EntityFramework
. 其他提示
所以经过一段时间看,我已经得出结论,我问题的答案是它是不可能的。
这不是一个大量的交易,因为我可以重命名属性,但我认为这应该是“只是工作”,所以我为它提出了一个MS CONNECT问题,可以在这里找到:使用SQL Reserved关键字作为DBContext上的集合名称导致异常。如果这得到解决或拒绝,因为实际上可能会更新此答案。
您可以始终使其复数,如组,使其成为“非保留”的单词。