以下代码抛出异常 "EntitySqlException: 'Group' 是保留关键字,除非转义,否则不能用作别名。位于第1行,第11列附近"。
我的问题首先是,我选择的数据上下文中的集合名称与生成的 SQL 查询似乎有什么关系?
其次,除了在上下文中重命名属性之外,是否还有其他解决方法(我知道这个名称很愚蠢,但有些原因我不能更改名称,我不会在这里详细说明)?
也许可以通过 modelBuilder 做些什么?
我的问题首先是,我选择的数据上下文中的集合名称与生成的 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);
}
var e = FROM a in ctx.Group
LINQ语法来看是否可以通过吗?如果你能够解释为什么不能重命名它,那可能会有所帮助。 - iCollect.it Ltd[
/]
(对于ESQL不太确定,我对这种方言不太熟悉;编辑 - 我已确认使用[
/]
确实可以解决此问题)。我认为这应该可以正常工作;你的期望是合理的。 - Marc Gravellgroup
是一个上下文关键字,而不是保留关键字,因此不应该引起问题,此外C#甚至为此提供了@
转义。坦率地说,我认为这是一个EF的错误。 - Marc Gravell