EF 4.2 코드 첫 번째 모델을 사용하는 프로젝트에서 작업 중입니다. 이 모델에는 제품에 대한 TPH 상속 구조가 포함되어 있습니다. 이 상속 모델의 다형성 결과를 판별 자에 그룹화해야하고 몇 가지 문제가 있습니다.엔티티 프레임 워크 4.2 식별자별로 계층 구조 그룹당 테이블
엔티티 프레임 워크는이 구분을 완료하기 위해 판별자를 노출하지 않습니다. 내 첫 번째 질문은이 discriminator에 직접 액세스 할 수 있습니까? 저의 독서와 경험은 아니오라고 말하고 있습니다. 그래서 저는 이러한 해결책을 찾아 냈습니다. 실적이 좋지 않고 유지 관리가 필요한 상황에 만족하지 않습니다.
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"속성을 기본 클래스에 추가했습니다. cludgy 느낌과 저장된 데이터를 반복하지만 더 나은 수행합니다. – sgrade1979