.net 如何在实体框架数据上下文中的属性名称中使用SQL保留关键字?

4bbkushb  于 2023-03-20  发布在  .NET
关注(0)|答案(3)|浏览(139)

下面的代码将抛出异常“*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);
}
baubqpgj

baubqpgj1#

您可以将其设置为复数形式,如Groups,将其设置为“非保留”字。

dced5bon

dced5bon2#

EF 4.3.1和EF 5.0 beta1中已修复此问题。请使用NuGet将EntityFramework包更新为最新版本。例如,在包管理器控制台中,运行:

Update-Package EntityFramework
wribegjk

wribegjk3#

因此,经过一段时间的研究,我得出结论,我的问题的答案是,这是不可能的。
这不是一个巨大的交易,因为我可以重命名的财产,但我认为这是应该“只是工作”,所以我提出了一个MS连接问题,它可以在这里找到:如果这个问题得到解决或拒绝,因为它实际上是可能的,我会更新这个答案。

**更新:**此问题现已解决。请参阅accepted answer

相关问题