DbContext
Entity 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プロパティを検出し、それに応じて設定します。