如何使用与“Id”不同的名称的主键

时间:2017-07-10 15:04:13

标签: asp.net-core entity-framework-core

我在使用Entity Framework Core 1.1的ASP.NET核心应用程序中遇到以下情况

数据库表名为“内容”

  • Content_ID(int not null,主键)
  • 标题(varchar max)
  • 说明(varchar max)

模型(“ContentEntry.cs”):

public class ContentEntry
{
    public int Id {get; set;}
    public string Title {get; set;}
    public string Description {get; set;}
}

配置文件(ContentEntryConfiguration.cs)

public class ContentEntryConfiguration : IEntityMappingConfiguration<ContentEntry>
{
    public void Map(EntityTypeBuilder<ContentEntry> modelBuilder)
    {
        modelBuilder.HasKey(m => m.Id);

        modelBuilder.Property(m => m.Id).HasColumnName("Content_ID");
        modelBuilder.Property(m => m.Title ).HasColumnName("Title");
        modelBuilder.Property(m => m.Description).HasColumnName("Description");

        modelBuilder.ToTable("Content");
    }
}

如上所述,我的表的主键名为“Content_ID”。 当我执行LINQ查询时,收到错误消息,指出数据库中未找到“ID”列。在使用SQL事件探查器检查生成的查询后,我注意到查询包含“ID”而不是“Content_ID”。 我希望实体框架生成一个包含“Column_ID”列的查询,并将其映射到我的名为“Id”的模型属性。

你知道为什么会发生这种情况以及如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

我解决了,我忘了在我的数据库上下文类中注册实体映射:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.RegisterEntityMapping<ContentEntry, ContentEntryConfiguration>();
}

答案 1 :(得分:0)

对于需要更简单的人来说,这就足够了

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<ContentEntry>().Property(c => c.Id).HasColumnName("Content_ID");
}