非公開のコレクションプロパティをEntityFramework Code Firstでマッピングするにはどうすればよいですか?

ネイサン

コレクションを含むエンティティはコレクションに特定のルールを適用する必要があるため、ドメインをより適切にカプセル化するために、非公開プロパティを持つエンティティのコレクションをマップしようとしています。

  public class Foo
  {
      public AddBar(Bar bar)
      {
          if (BarsInternal.Count > 4)
          {
              throw new Exception("Too many Bars!");
          }
          BarsInternal.Add(bar);
      }           

      public IEnumerable<Bar> Bars 
      { 
          get { foreach (var bar in BarsInternal) { yield return bar; } }
      }

      internal virtual IList<Bar> BarsInternal { get; set; }

  }

非コレクションプロパティの場合、これまでは、プロパティを内部にInternalsVisibleToし、マッピングクラスを使用してプロパティを通常どおりにマッピングする(エンティティフレームワークがドメインモデルと同じアセンブリにない場合に適用する)ことでこれを行うことができました

ただし、コレクションの場合、これを機能させることができないようです。プロパティをパブリックとしてマークし、次のマッピングを使用する場合:

public class FooMap : EntityTypeConfiguration<Foo>
{
    public FooMap()
    {
        this.HasMany(x => x.BarsInternal);
    }
}

その後、すべてが機能します。

ただし、Barsプロパティを内部に変更すると、次の奇妙な動作が発生します。

  • データベーステーブルは期待どおりに作成され(コードファーストマイグレーションを使用)、外部キーとすべてが整列しているため、エンティティフレームワークが何らかの方法で内部プロパティを読み取っているようです。
  • を使用context.Foos.AddOrUpdate(fooInstance)したCodeFirst MigrationsBars、予想どおり、データベース内コレクションを完全に永続化します。
  • ただしFooコンテキストからを取得する場合Barsコレクションは常に空です。

Entity Framework Code Firstで非公開のコレクションプロパティを正しくマップするにはどうすればよいですか?

ネイサン

のアクセス修飾子をBarsInternalからinternal変更するprotected internalと、正しく機能します。

この理由は、エンティティフレームワークがコレクションのバックグラウンドでプロキシを使用し、プロキシがコレクションプロパティをオーバーライドできる場合にのみ、コレクションプロパティを「シャドウ」できるためだと思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Visual Studio Codeで自動インポートにパスマッピングを使用するにはどうすればよいですか?

分類Dev

VS Codeでラッピングインデントサイズを構成するにはどうすればよいですか?

分類Dev

VS Codeでコンパイラのプログラムアーキテクチャを設定するにはどうすればよいですか?

分類Dev

Code First DbContextのスキーマを動的に設定するにはどうすればよいですか?

分類Dev

オフライン開発環境にVisualStudio Codeのタイピングをインストールするにはどうすればよいですか?

分類Dev

コマンドラインからVisualStudio Codeを実行するにはどうすればよいですか?

分類Dev

Visual Studio Code Extensions:マウスのドラッグ中にonDidChangeTextEditorSelectionイベントの発生を停止するにはどうすればよいですか?

分類Dev

Visual Studio CodeでGitタグをプッシュするにはどうすればよいですか?

分類Dev

プロパティをマッピングから除外するにはどうすればよいですか

分類Dev

カスケード削除する親IDへの外部キーとして文字列を使用してEntityFramework Code Firstコレクションを構成するにはどうすればよいですか?

分類Dev

Visual Studio Codeでコメントブロック文字をカスタマイズするにはどうすればよいですか?

分類Dev

コレクションをネストされたコレクションプロパティの要素でグループ化されたグアバマルチマップに変換するにはどうすればよいですか?

分類Dev

64ビットのVisualStudio Codeをダウンロードするにはどうすればよいですか?

分類Dev

Visual Studio Codeのマークダウンプレビューでオンラインstyle.cssを使用するにはどうすればよいですか?

分類Dev

LinuxでCプログラムをデバッグするようにVisualStudio Codeを設定するにはどうすればよいですか?

分類Dev

Visual Studio Codeに保存されていないドキュメントをフォーマットするにはどうすればよいですか?

分類Dev

@Anyアノテーション付きプロパティを双方向マッピングするにはどうすればよいですか?

分類Dev

VS Code:選択時にコピーを無効にするにはどうすればよいですか?

分類Dev

Visual Studio Codeでドキュメントマップを有効にするにはどうすればよいですか?

分類Dev

VS CodeとMSVCツールチェーンを使用してRustプログラムをデバッグするときに、「パニック」にブレークポイントを設定するにはどうすればよいですか?

分類Dev

VS CodeでCompletionListをプログラムで表示するにはどうすればよいですか?

分類Dev

Visual Studio Code-デバッグ中に変数値をインラインで表示するにはどうすればよいですか?

分類Dev

VS Codeで現在のテーマの色を取得するにはどうすればよいですか?

分類Dev

VS Codeクイックピッカーでアイテムをデフォルトに設定するにはどうすればよいですか?

分類Dev

Visual Studio CodeのコメントでIntelliSenseを無効にするにはどうすればよいですか?

分類Dev

VS Codeでサインインするgitcommitを使用するにはどうすればよいですか?

分類Dev

シリアル化中にJSONプロパティ名を独自の変数名にマッピングするにはどうすればよいですか?

分類Dev

Visual Studio Codeでこのプロットを小さくするにはどうすればよいですか?

分類Dev

VS Codeのテンプレートでvue小道具のTypescriptタイピングとインテリセンスを有効にするにはどうすればよいですか?

Related 関連記事

  1. 1

    Visual Studio Codeで自動インポートにパスマッピングを使用するにはどうすればよいですか?

  2. 2

    VS Codeでラッピングインデントサイズを構成するにはどうすればよいですか?

  3. 3

    VS Codeでコンパイラのプログラムアーキテクチャを設定するにはどうすればよいですか?

  4. 4

    Code First DbContextのスキーマを動的に設定するにはどうすればよいですか?

  5. 5

    オフライン開発環境にVisualStudio Codeのタイピングをインストールするにはどうすればよいですか?

  6. 6

    コマンドラインからVisualStudio Codeを実行するにはどうすればよいですか?

  7. 7

    Visual Studio Code Extensions:マウスのドラッグ中にonDidChangeTextEditorSelectionイベントの発生を停止するにはどうすればよいですか?

  8. 8

    Visual Studio CodeでGitタグをプッシュするにはどうすればよいですか?

  9. 9

    プロパティをマッピングから除外するにはどうすればよいですか

  10. 10

    カスケード削除する親IDへの外部キーとして文字列を使用してEntityFramework Code Firstコレクションを構成するにはどうすればよいですか?

  11. 11

    Visual Studio Codeでコメントブロック文字をカスタマイズするにはどうすればよいですか?

  12. 12

    コレクションをネストされたコレクションプロパティの要素でグループ化されたグアバマルチマップに変換するにはどうすればよいですか?

  13. 13

    64ビットのVisualStudio Codeをダウンロードするにはどうすればよいですか?

  14. 14

    Visual Studio Codeのマークダウンプレビューでオンラインstyle.cssを使用するにはどうすればよいですか?

  15. 15

    LinuxでCプログラムをデバッグするようにVisualStudio Codeを設定するにはどうすればよいですか?

  16. 16

    Visual Studio Codeに保存されていないドキュメントをフォーマットするにはどうすればよいですか?

  17. 17

    @Anyアノテーション付きプロパティを双方向マッピングするにはどうすればよいですか?

  18. 18

    VS Code:選択時にコピーを無効にするにはどうすればよいですか?

  19. 19

    Visual Studio Codeでドキュメントマップを有効にするにはどうすればよいですか?

  20. 20

    VS CodeとMSVCツールチェーンを使用してRustプログラムをデバッグするときに、「パニック」にブレークポイントを設定するにはどうすればよいですか?

  21. 21

    VS CodeでCompletionListをプログラムで表示するにはどうすればよいですか?

  22. 22

    Visual Studio Code-デバッグ中に変数値をインラインで表示するにはどうすればよいですか?

  23. 23

    VS Codeで現在のテーマの色を取得するにはどうすればよいですか?

  24. 24

    VS Codeクイックピッカーでアイテムをデフォルトに設定するにはどうすればよいですか?

  25. 25

    Visual Studio CodeのコメントでIntelliSenseを無効にするにはどうすればよいですか?

  26. 26

    VS Codeでサインインするgitcommitを使用するにはどうすればよいですか?

  27. 27

    シリアル化中にJSONプロパティ名を独自の変数名にマッピングするにはどうすればよいですか?

  28. 28

    Visual Studio Codeでこのプロットを小さくするにはどうすればよいですか?

  29. 29

    VS Codeのテンプレートでvue小道具のTypescriptタイピングとインテリセンスを有効にするにはどうすればよいですか?

ホットタグ

アーカイブ