DbContextEntity Frameworkでは、 IDbSetプロパティを使用して派生するクラスを作成する必要があります。Entity Frameworkでセッターと呼ばれるものと、これはどのように機能しますか?
2 に答える
カスタムコンテキストクラスがインスタンス化されると、基本DbContextコンストラクターはと呼ばれるプライベートメソッドInitializeLazyInternalContextを呼び出し、次に、と呼ばれる別のプライベートメソッドを呼び出しDiscoverAndInitializeSetsます。
このメソッドは、の新しいインスタンスを作成DbSetDiscoveryServiceし、現在のコンテキストをコンストラクターパラメーターとして渡し、そのInitializeSetsメソッドを呼び出します。このメソッドは、GetSetsリフレクションを使用して、から割り当て可能な派生コンテキストのプロパティのリストを取得する呼び出しを行いますDbSet<T>(これにはを含みますIDbSet<T>)。
次に、このコレクションをループし、プロパティがでマークされていない場合は、DbContextのメソッドを呼び出して結果を割り当てることによりSuppressDbSetInitializationAttribute、のインスタンスを割り当てます。DbSet<T>Set<TEntity>
ここDbSetDiscoveryServiceでコードを表示できます。
EFはリフレクションを使用して、DbContext派生クラスのIDbSetプロパティを検出し、それに応じて設定します。