我在使用Entity Framework Core 1.1的ASP.NET核心应用程序中遇到以下情况
数据库表名为“内容”
模型(“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”的模型属性。
你知道为什么会发生这种情况以及如何解决这个问题吗?
答案 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");
}