2017-06-04 4 views
0

EFコアマイグレーションを使用している場合、ツールはすべてのプロパティを取得せず、FK(ナビゲーションプロパティ)の「Id」と一部(すべてではない)のみを取得します。 "階層あたりのテーブル"も非常によく理解されているようです - 私が望んでいたディスクリミネータを設定していますが、マイグレーションファイル自体がモデルネームスペース(githubコードを参照)にあるプロパティを反映していません。EFコアマイグレーションですべてのプロパティが選択されない

マイDbContextはここに置かれています。ここhttps://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/InfoBoothContext.cs 私のモデルクラス:https://github.com/aredfox/TheConference/tree/master/InfoBooth/TheConference.InfoBooth.Core/Model

あなたは[https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/Migrations/20170604125116_Initial.cs]で生成された "最初の移行" で見ることができます。ここで、すべてのIdプロパティ(基本クラス[Entity][1]で定義されています)が検出されたことがわかりますが、Model classesという他のプロパティはありません。

移行を実行するためのコンソールアプリケーションを追加する方法を使用しました(そうでないと動作しません - Julie Lerman's tipsを参照してください)。したがって、移行を実行する場合、私はこのようにします:dotnet ef --startup-project ../../TheConference.Infrastructure.ConsoleApp migrations add Initial

私はEFは私が撮りたいものを知っているように注釈またはModelBuilderのまたはEFCoreでEntityTypeConfigurationのフォームを使用する必要がありますか?

答えて

5

クラスのプロパティのすべてがこの

public string Title { get; } 

すなわち似ているだけで、自動プロパティを読み取ります。

EFコアは、このようなプロパティをサポート(マップ)していません。 privateprotectedまたはinternalが動作します - 彼らがマッピングされて得るためには、プロパティのセッター

public string Title { get; set; } 

アクセスレベルは本当に問題ではないんを提供する必要があります。唯一の要件はセッターを持つことです。

EFコアでも、マッピングプロパティとバッキングフィールドを使用できますが、流暢なAPI設定が必要なものすべてが、readonlyフィールドでバックアップされているため、自動プロパティのみを取得することはできません。

+2

もう少し追加するには、プリミティブプロパティ&リファレンスナビゲーションプロパティにセッターが必要です。コレクションのナビゲーションにはセッターは必要ありません。 (コンストラクタ内のコレクション初期化子またはデフォルト値を書き込むのは、ユーザにとって共通のパターンです)。 インターフェイスに設定済みの&コレクションのナビゲーションがマップされているため、IDが一致しました。 – Smit

+0

ありがとう。流暢なAPIでそれらをcfg'ingときにそれだけでもそれを理解する私は彼らが読んでいたエラーメッセージを得て、そして私のペニーは落ちた...答えに感謝!愚かな間違い、私は見落とした。 –

+1

あなたは歓迎です、仲間。時々、私たち全員に起こります:) –

関連する問題