【问题标题】:How to have a primary key with a different name than "Id"如何拥有与“Id”不同名称的主键
【发布时间】:2017-12-14 09:25:39
【问题描述】:

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

名为“内容”的数据库表

  • Content_ID(int 非空,主键)
  • 标题(最大 varchar)
  • 说明(最大varchar)

模型(“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 Profiler 检查生成的查询后,我注意到查询包含“ID”而不是“Content_ID”。 我希望实体框架生成一个包含“Column_ID”列的查询,并将其映射到我的名为“Id”的模型属性。

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

【问题讨论】:

  • @Kris 我更正了;这只是一个打字错误,但不是我的问题的原因。

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


【解决方案1】:

对于有简单需求的人来说,这就足够了

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多