EF Core Migrationを使用している場合、ツールはすべてのプロパティを取得せず、FK(ナビゲーションプロパティ)の「Id」と一部(すべてではない)のみを取得します。 "階層あたりのテーブル"も非常によく理解されているようです - 私が望んでいたディスクリミネータを設定していますが、マイグレーションファイル自体がモデルネームスペース(githubコードを参照)にあるプロパティを反映していません。
私のDbContextはここにあります: https : //github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/InfoBoothContext.csマイモデルクラスはこちら: https : //github.com/aredfox/TheConference/ツリー/マスター/ InfoBooth / TheConference.InfoBooth.Core / Model
生成された「初期移行」は、[ https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/Migrations/20170604125116_Initial.cs ]で確認できます。そこでは、すべてのIdプロパティ(基本クラス[Entity][1]
定義されています)が検出されていますが、他のどのプロパティもモデルクラスのどれも検出されませんでした。
私は、移行を実行するためのコンソールアプリケーションを追加する方法を使用しました(そうでなければ動作しません - Julie LermanがEF Coreを使い始める際のヒントを参照してください)。したがって、移行を実行するときは次のようにしますdotnet ef --startup-project ../../TheConference.Infrastructure.ConsoleApp migrations add Initial
ます。
EFが私に何をしたいかを知らせるために、 注釈やmodelBuilder、またはEntityTypeConfigurationの形式をEFCoreで使用する必要がありますか? 。
あなたのクラスプロパティはすべて次のようなものです
public string Title { get; }
すなわち、読み取り専用の自動プロパティ。
EFコアは、このようなプロパティをサポート(マップ)していません。それらをマッピングするには、プロパティセッターを用意する必要があります
public string Title { get; set; }
アクセスレベルは本当に重要ではありません。 private
、 protected
またはinternal
が機能します。唯一の要件はセッターを持つことです。
EFコアでは、マッピングプロパティとバッキングフィールドを使用することもできますが、流暢なAPI設定が必要なものはすべて、 readonly
フィールドでバックアップされているため、自動プロパティのみを取得することはできません。