私のチームは Entity Framework 4.3.0 - コードのみを使用し、POCO クラスを ORM として使用しています。現在、クラスのDBSetを使用して「テーブル」にアクセスしています
Public Property Customers As DbSet(Of Customers)
しかし、多くの場合、LINQ の IsDeleted 列に基づいて論理的な削除を行い、それに応じて select ステートメントをフィルター処理しています。
Dim LiveCustomers =
From C In EM.Customers
Where C.DeleteFlag = False
私が本当にやりたいことは、このフィルターを含むすべてのクエリを記述する代わりに、強い型を維持しながら、フィルター処理されたセットを提供するいくつかの下位レベルのプロパティ (おそらく継承された DbContext レベル) を作成することです。
私はこれを試しました:
Public Property Customers As DbSet(Of Customer)
Public Property Customers_Live As DbSet(Of Customer)
Get
Return From C In Customers
Where C.DeleteFlag = False
End Get
Set(value As DbSet(Of Customer))
Customers = value
End Set
End Property
しかし、それは私にこのエラーをもたらしました:
タイプごとの複数のオブジェクト セットはサポートされていません。オブジェクト セット 'Customers' と 'Customers_Live' は両方ともタイプ ' _ _.Customer' のインスタンスを含むことができます。
Google で簡単に確認すると、この有望な結果が得られました (方法: タイプごとに複数のエンティティ セットを持つオブジェクトをクエリする)。しかし、接続文字列を更新した後も、同じエラーが発生します。
<add name="EntityManager"
providerName="System.Data.SqlClient"
connectionString="
Data Source=xxxxxx;
Initial Catalog=xxxxxx;
User Id=xxxxxx;
Password=xxxxxx;
MultipleActiveResultSets=True"/>
私の質問は、アップストリームの使用にあまり大きな影響を与えることなく、フィルタリングを適用できる LINQ ビューを効果的に作成するにはどうすればよいでしょうか?