下面的代码将抛出异常“*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);
}
3条答案
按热度按时间baubqpgj1#
您可以将其设置为复数形式,如Groups,将其设置为“非保留”字。
dced5bon2#
EF 4.3.1和EF 5.0 beta1中已修复此问题。请使用NuGet将EntityFramework包更新为最新版本。例如,在包管理器控制台中,运行:
wribegjk3#
因此,经过一段时间的研究,我得出结论,我的问题的答案是,这是不可能的。
这不是一个巨大的交易,因为我可以重命名的财产,但我认为这是应该“只是工作”,所以我提出了一个MS连接问题,它可以在这里找到:如果这个问题得到解决或拒绝,因为它实际上是可能的,我会更新这个答案。
**更新:**此问题现已解决。请参阅accepted answer。