1

私のチームは 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 ビューを効果的に作成するにはどうすればよいでしょうか?

4

2 に答える 2

2

プロパティを次のように変更します。

Public Property Customers As DbSet(Of Customer)

Public Property Customers_Live As IQueryable(Of Customer)
    Get
        Return From C In Customers
                Where C.DeleteFlag = False
    End Get
End Property

Add()やのようなものがないため、これは少し異なりますがRemove()、ビューの場合、通常、そのような機能を期待することはありません。新しいものを追加したい場合、または削除したい場合は、通常のCustomersプロパティを使用する必要があります。

于 2012-06-15T20:18:19.597 に答える
0

フィルタリングを行う新しいメソッドを持つ新しいクラスから POCO クラスを継承させることができます。このようなものを新しいクラスに追加します --PSEUDO CODE!--

Public Function Filtered() as IEnumerable(Of Out T)
    Return (From x In Me Where x.DeleteFlag).ToList()
End Function

次のように呼び出すことができます: Dim LiveCustomers = From C In EM.Customers.Filtered

または、インターフェイスを作成し、linq クエリを呼び出すときに依存性注入を行うこともできます。あなたはそれをグーグルする必要があります:)

于 2012-06-15T20:34:52.133 に答える