문제

nhibernate는 오류를 제공합니다. 사용자 정의 유형은 UserCollectionType : myApp.Domain.OrderLineCollection을 구현하지 않습니다.

Bindinglist는 ILIST를 구현합니다. 그렇다면 왜 nhibernate가 ilist 대신 UserCollectionType를 사용하려고 하는가?

public class OrderHeader
{
    public virtual int OrderHeaderId { get; set; }
    public virtual string OrderNumber { get; set; }
    public virtual OrderLineCollection Line { get; set; }
}

public class OrderLineCollection : BindingList<OrderHeader> { }

public class OrderHeaderMap : ClassMap<OrderHeader>
{
    public OrderHeaderMap()
    {
        WithTable("Orders");
        Id(x => x.OrderHeaderId, "OrderId").GeneratedBy.Identity();
        Map(x => x.OrderNumber);
        HasMany(x => x.Line).WithKeyColumn("OrderHeaderId").AsList();
    }
}

<list name="Line">
  <key column="OrderHeaderId" /> 
  <index /> 
  <one-to-many class="myApp.Domain.OrderLine, myApp.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
</list>
도움이 되었습니까?

해결책

Nhibernate에는 ILIST를 구현하는 자체 맞춤형 입력 목록이 있습니다.
nhibernate userType를 만들지 않고는 당신이 당신의 것을 사용할 수 없을 것 같습니다.

그러나 나는 틀렸을 수도 있고 그 이유를 듣고 기뻐할 것입니다. :)

다른 팁

fluentnhibernate가 생성 한 XML을 확인하고 싶을 수도 있습니다. 라인 속성의 유형을 취하고 명시 적으로 설정할 수 있습니다.

유형을 명시 적으로 설정하지 않으면 작동해야합니다. ILIST에서 파생 된 사용자 정의 컬렉션을 구현하려고 시도했으며 가방/목록에 유형을 지정하지 않았을 때 작동했습니다.

좋아, 나는 빠른 시험을했다 Arnis L. 옳습니다 - 아마도 usercollectiontype를 구현하지 않으면 작동하지 않을 것입니다. 내 경험상, 구현하는 것은 고통입니다.

(어떻게 든 나는 이런 일을하는 것을 기억했지만 내 마음이 나에게 속임수를 쓰는 것 같아)

나는 nhibernate 소스 코드를보고 적어도 persistentbag 및 persistentlist nhibernate에 대해서는 ArrayList 객체를 백엔드 목록으로 시동 할 것입니다. iusercolletionType를 구현할 때 NHibernate에게 어떤 컬렉션을 작성 해야하는지, 그리고 Save에 어떤 영구 수집 최대 절전 모드를 사용해야하는지 알려주는 방법이 있습니다. 보세요 이 링크 많은 도움이 될 수 있습니다. 그러나 나는 여전히 Bindinglist와 함께 일을 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top