Entity Framework Core 1.1を使用したASP.NET Coreアプリケーションでは、次のような状況があります。
"Content"という名前のデータベーステーブル
モデル( "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プロファイラで調べた後、クエリに「Content_ID」ではなく「ID」が含まれていることがわかりました。私はエンティティのフレームワークが代わりに列 "Column_ID"を含むクエリを生成し、 "Id"という名前のモデルプロパティにマップすることを期待しています。
なぜこれが起こっているのか、この問題をどうやって修正できるのか考えていますか?
私はそれを解決した、私はちょうど私のDBコンテキストクラスでエンティティマッピングを登録することを忘れていた:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.RegisterEntityMapping<ContentEntry, ContentEntryConfiguration>();
}
より単純なニーズを持つ人にとっては、これで十分です
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ContentEntry>().Property(c => c.Id).HasColumnName("Content_ID");
}