Свободный nHibernate с BindingList <T> - PullRequest
1 голос
/ 30 июля 2009

nHibernate выдает ошибку: пользовательский тип не реализует UserCollectionType: myApp.Domain.OrderLineCollection.

BindingList реализует IList, так почему nHibernate пытается использовать UserCollectionType вместо IList?

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>

Ответы [ 3 ]

3 голосов
/ 30 июля 2009

NHibernate имеет свой собственный типизированный список, который реализует IList внизу.
Боюсь, вы не сможете использовать свой, не создав nHibernate UserType.

Но я могу ошибаться и был бы рад услышать почему. :)

0 голосов
/ 22 июля 2011

Я смотрю на исходный код NHibernate и, по крайней мере, для PersistentBag и PersistentList NHibernate создаст объект ArrayList в качестве внутреннего списка, а не OrderLineCollection, как можно было подумать. Когда вы реализуете IUserColletionType, существует метод, который сообщает NHibernate, какую коллекцию он должен создать, а также какую сохраняемую коллекцию Hibernate следует использовать для сохранения. Взгляните на , эта ссылка может сильно помочь. Но я все еще не могу сделать работу Nhibernate с BindingList.

0 голосов
/ 31 июля 2009

Возможно, вы захотите проверить XML, созданный fluentNHibernate - вполне возможно, что они берут тип свойства Line и устанавливают его явно.

Это должно работать, если вы не установили тип явно. Я попытался реализовать пользовательскую коллекцию, созданную на основе IList, и она работала, когда я не указывал тип в сумке / списке в отображении.

Хорошо, я сделал быстрый тест Арнис Л. прав - вероятно, он не будет работать без реализации UserCollectionType. По моему опыту, это трудно реализовать.

(каким-то образом я вспомнил, как делал что-то подобное, но я думаю, что мой ум обманывает меня)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...