私はEF 4.2コードの最初のモデルを使ってプロジェクトを進めています。このモデルには、製品のTPH継承構造が含まれています。この継承モデルの多形性の結果を弁別器にグループ化し、いくつかの問題にぶつかっている必要があります。エンティティフレームワーク4.2識別子ごとの階層グループごとのテーブル
エンティティフレームワークは、このグループ化を完了するためにディスクリミネータを公開しません。私の最初の質問は、この弁別者に直接アクセスできるのですか?私の読書と経験は私にはないと言っているので、私はこの解決策を思いついた。それはうまく実行されていないと私はそれが維持する必要がある方法に満足していません。
Public MustInherit Class Product
<key()>
Public Property ProductID as integer
<StringLength(50, ErrorMessage:="Max 50 characters")>
<Required(ErrorMessage:="Product name is required")>
Public Property Name as String
<TimeStamp()>
Public Property Time_Stamp as DateTime = DateTime.Now()
End Class
Public Class Desktop
Inherits Product
<StringLength(50, ErrorMessage:="Max 50 characters")>
<Required(ErrorMessage:="Processor is required")>
Public Property Processor as String
End Class
Public Class Monitor
Inherits Product
<Required(ErrorMessage:="Monitor size is required")>
Public Property Size_Inches as Integer
End Class
私は製品を受け取り、それを文字列としてbasetype名前だ返す拡張メソッドを構築しました:
私のクラスでは、この(簡体字)のようなものを見て。私はそれらを介して実行できるようにして
<Extension()>
Public Function ProductType(ByVal inProduct as Product) as String
ProductType = inProduct.GetType().BaseType.Name
End Function
が、私は種類によってグループに製品の結果をこのような構造を構築しました:
Dim tmpProducts = db.Products.ToList()
Dim GrpProducts = tmpProducts.GroupBy(Function(prod) prod.ProductType) _
.Select(Function(s) New With {.ProductType = S.Key,
.Products = S })
私は今、リストをループは、私が欲しいの行動を取得することができ、性能は理想的ではなく、製品の数が増えるにつれてそれは容認できないと心配しています。
For Each ProductGroup in GrpProducts
Dim TypeName as String = ProductGroup.ProductType
Dim TypeProducts = ProductGroup.Products
Next
また、これは私の共有プロパティ(名前)への容易なアクセスを与えることができますが、今私は多分彼らの本当の種類、型名の周りを選択した場合にこれらをキャストするために多くのオプションを持っていません。 。 。
上記のコードエラーを許していただきありがとうございます。現時点ではプロジェクトにアクセスできないので、私はメモリからサンプルを再入力しました。
弁別によってあなたにグループを解決する方法を取得する必要があります。最近、オーバーライド可能な "ProductTypeName"プロパティをベースクラスに追加しています。クールジーを感じ、記憶されたデータを繰り返しますが、パフォーマンスは向上します。 – sgrade1979