私は、EF 4.2 コードの最初のモデルを使用してプロジェクトに取り組んでいます。このモデルには、製品の TPH 継承構造が含まれています。この継承モデルのポリモーフィックな結果をディスクリミネーターでグループ化する必要があり、いくつかの問題が発生しています。
エンティティ フレームワークは、このグループ化を完了するための識別子を公開しません。私の最初の質問は、この識別器に直接アクセスできるかどうかです。私の読書と経験は私にノーと言っているので、私はこの種の作品の解決策を思いついた. うまく機能しておらず、どのように維持する必要があるかについて満足していません.
私のクラスは次のようになります(簡略化):
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
製品を受け取り、そのベースタイプ名を文字列として返す拡張メソッドを構築しました。
<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
また、これにより共有プロパティ (名前) に簡単にアクセスできますが、これらを実際の型にキャストするための多くのオプションがありません。. .
任意の推奨事項を歓迎します。また、上記のコード エラーをご容赦ください。現時点ではプロジェクトにアクセスできないため、メモリから例を再入力しました。