다른 제품이 있습니다. 전혀 FNH 또는 NH로 매핑 할 수 있습니다 : 곱셈 값, 값 목록, 등 ...Fluent NHibernate : 서브 클래스 내부의 서브 클래스
public class Product : Entity
{
}
public class Quantity: Entity
{
}
public class ListQuantity : Quantity
{
public virtual IList<int> Quantities { get; set; }
}
public class MultiplierQuantity : Quantity
{
public virtual int Multiplier { get; set; }
}
public class AppProduct : Product
{
public virtual Quantity Quantity { get; set; }
}
질문은 - 이제, AppProduct 서로 다른 양의 종류가? 특히, 자동 매핑. 내게는 자신의 테이블에 제품을 매핑하는 것이 자연스럽지 만, 수량은 AppProducts 테이블의 일부가됩니다. 즉, 차별화됩니다.
다른 Subclass, JoinedSubclass 등 행운없이 다른 NH 예외가있는 방식으로 시도했습니다. 조인 된 서브 클래스와 함께 두 계층 구조가 기본적으로 매핑되는 경우에만 작동합니다. 그러나 automapper는 IList [int]를 자동으로 매핑 할 수 없습니다. IList [제품]을 설정하면 (테스트 할 때) 모든 것이 완벽하게 작동합니다. 나는이 매핑을 사용하여 IList의 [INT]을 유지하려고하는 경우 :
public class ListQuantityMap : IAutoMappingOverride<ListQuantity>
{
public void Override(AutoMap<ListQuantity> mapping)
{
mapping.HasMany(x => x.Quantities).AsElement("QuantitiesId");
}
}
System.Xml.Schema.XmlSchemaValidationException에 실패했을 경우 요소 이름 공간에서 '클래스' '항아리 : NHibernate에 매핑-2.2'은 무효가 네임 스페이스 'urn : nhibernate-mapping-2.2'에서 자식 요소 'bag'. 예상 가능한 요소 목록 : 'urn : nhibernate-mapping-2.2'네임 스페이스의 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id'
하지만 내 보낸 Orders.Core.Quantity.hbm.xml의 유일한 차이점은 일대 다 클래스 유형입니다. 즉, NHibernate는 거의 동일한 매핑에서 bag에 대해 불평하지 않습니다.
(참고 : 최근 FNH # 299에서 수정 된 버그 일 가능성이 높습니다.)
어쨌든 합류 된 하위 클래스는 완벽한 해결책이 아닙니다. 나는 AppProduct에서 단지 구성 요소를 수행하고 속성 "QuantityType"이 할당 될 때 적절한 수량 객체를 직접 생성한다고 생각합니다. 너무 이상합니다. 아니면 Linq2Sql로 전환하는 것이 도움이 될까요? ;-)
이 모델을 매핑하려는 db 스키마를 포함하면 도움이 될 것입니다. 나는 당신의 의도가 그것 없이는 무엇인지 이해하기 위해 애 쓰고 있습니다. –
스키마가 없으며 엔티티 및 FNH 생성 매핑을 기반으로 생성됩니다. 그래서 그것은 당신이 좋아하는 어떤 것이라도 될 수 있습니다. 또한 수동 HasMany 예외 문제는 최근의 FNH 개정판 (모든 하위 클래스에 삽입 된 무시)에서 수정 된 버그였습니다. – queen3