3

ComplexType의 컬렉션 인 POCO 내에서 속성을 만들 수 있습니까?코드 첫 번째가있는 EF 4.1의 ComplexType Collection 속성

[ComplexType] 
public class Attachment 
{   
    public string FileName { get; set; } 

    public byte[] RawData { get; set; } 

    public string MimeType { get; set; } 
} 

public class TestObject 
{ 
    public TestObject() 
    { 
     Attachments = new List<Attachment>(); 
    } 

    public virtual ICollection<Attachment> Attachments { get; set; } 
} 

나는 이것이 가능하지 않은 것을 느낌 ... 나는 그것을 연구하기 위해 최선을 해왔이 있고 복합 유형들이 여러 가지 이유로 가치가보다 더 많은 문제가있는 것처럼 그것은 나에게 보인다.

답변

2

귀하의 느낌은 옳습니다 : 불가능합니다. 복합 유형의 목적은 열의 속성을 상위 유형의 테이블에 포함시키는 것입니다. 어떻게하면 테이블의 행에 동적 컬렉션을 포함시킬 수 있으며 저장 방법에 관해 복잡한 유형 컬렉션에서 무엇을 기대할 수 있습니까?

실제로 필요한 일반 탐색 속성 (기본적으로 [ComplexType] 속성을 제거해야 함)입니다. 내 opnion에서 귀하의 관계는 TestObjectAttachment 사이의 관계는 OrderOrderItem 사이의 관계와 같습니다. OrderItem은 하나의 Order (주문을 가리키는 외래 키 하나가 있음)을 고유하게 나타내며 계단식 삭제가 가능하게되어 항목 주문과 함께 삭제되며 주문에 대한 상품의 의존성을 강조합니다. OrderItems/Attachments을 복잡한 유형으로 만들어 다른 무엇을하고 싶습니까?

+0

첨부 파일이 마음에 들었으므로 ComplexType (이름, 주소 등)에서 본 다른 예제와 매우 유사하기 때문에 ComplexType을 사용하려고했습니다. 해당 형식을 한 번 선언하고 다시 사용하는 것이 좋을 것이라고 생각했습니다. 여러 곳. 나는 이것을 유지할 것이라고 생각하지만 ComplexType을 필요한 다른 POCO로 랩핑한다. 감사. – DMC

3

Slauma가 말한 개념적 불일치로 인해 가능하지는 않지만 EF가이를 구현하지 않았기 때문에 가능하지는 않습니다. 컬렉션 지원에 대한 자세한 내용은 this answer을 참조하십시오.

그렇다면 엔티티로 만드는 것이 좋습니다. 포장하지 않아도됩니다. 이 매핑되지 않은 Attachment 유형을 기본으로 가질 수 있으며 인 특정 하위 유형이 있습니다.

+0

흥미 롭습니다! NH가 매장 수준에서 복잡한 유형의 콜렉션을 구현하는 방법을 알고 계십니까? "숨겨진"테이블 (EF의 다 대다 조인 테이블과 비슷한 모델의 엔티티에 해당하지 않음)과 같은 이미지를 만들 수 있으며 ORM 프레임 워크에서 내부적으로 관리 할 수 ​​있습니다. 그리고 부모 엔티티가로드 될 때마다 데이터베이스의 조인에 의해 콜렉션이 페치됩니다. 이건 비슷하니? – Slauma

+1

@Slauma : 복잡한 유형은 스칼라 유형과 다르지 않습니다. int 컬렉션의 경우 값과 부모에 대한 FK라는 두 개의 열이있는 테이블이 있습니다. 첨부 파일에는 FK와 다른 3 개의 열이 있습니다. 관계는 항상 일대 다 (many-to-many)가 아닌 복잡한 유형이 자체적으로 존재하지 않기 때문에 일대 다입니다. 로딩은 다른 컬렉션과 마찬가지로 열망하거나 게으르다. –

+0

니스, NH의 좋은 기능 것 같습니다! – Slauma

관련 문제