На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> NHibernate , Colection Serializable
    Уважаемые знатоки этой ORM и колеекций из ее поставки.
    Вот делаю обзорчик и наткнулся на одну неприятную вещь:
    XmlSerializer упорно не хочет даже создаваться, если класс использует Iesi.Collections.HashedSet, реализующую ISet,
    При этом говоря :
    ExpandedWrap disabled
      You must implement a default accessor on Iesi.Collections.ISet because it inherits from ICollection.

    Бинарный форматтер сериализует-десериализует без проблем.

    Версия - 1.2
    Может использовать другие типы коллекций для отношения один-ко-многим? Буду благодарен за советы.
    Спасибо.
      Это особенность XML сериализации которая требует и сетера и гетера для сериализации. Я бы не советовал заморачиваться с NHibernate на данный момент он практически не совместим с WCF именно по причине проблем с сериализацией собственных коллекций, WCF имеет траблы с передачей их через границы доменов(по сути сериализацией/десириализацией). Есть линк с описанием некоторых проблем http://lunaverse.wordpress.com/2007/05/09/remoting-using-wcf-and-nhibernate/ в текущем проекте решили отказаться в пользу использования LINQ TO SQL, с которым таких проблем нет.
        М-да..
        Спасибо, Серега. Намучился :)
        Попробовал с bag, с женериками, что-то можно сделать, но куда не наступи.. - какие-то грабли..
        Сейчас буду читать..
          Для интересующихся:
          1. Использовать коллекции NHibernate.Collection.PersistenBag в связях один ко многим.
          2. Для передачи между доменами использовать или BinaryFormatter, или в случае WCF - System.Runtime.Serialization.NetDataContractSerializer (как подключать - ходить по ссылке juice)

          Нюансы - NetDataContractSerializer не умеет разруливать циклические ссылки в графе при сериализации (разруливать - отсутсвием атрибутов [DataMember] на связях - многие к одному).

          Вроде выкрутился, вопрос закрыт

          Добавлено
          Цитата juice @
          Я бы не советовал заморачиваться с NHibernate на данный момент он практически не совместим с WCF именно по причине проблем с сериализацией собственных коллекций


          juice, кстати совместим и легко ;) В статье написано
          Сообщение отредактировано: PIL -
            Цитата PIL @
            juice, кстати совместим и легко В статье написано

            Ярик :), я же линк специально тебе кинул ;), я ведь знаю как ты любишь все после сборки обрабатывать напильником ;))))) Сам с этим столкнулся, решение в виде написания собственного сереализующего кода который с некоторыми оговорками работает, нас не устроило. Поэтому предпочел родную MS технологию с которой проблем не наблюдается. Поводом юзать NHibernate, может быть только маниакальное желание не использовать хранимые процедуры и иметь возможность с теми или иными отговорками отвязаться от базы данных.
              Цитата juice @
              с теми или иными отговорками отвязаться от базы данных
              - ну ты ж знаешь наши боевые условия и требования )))

              Цитата juice @
              в виде написания собственного сереализующего кода
              - System.Runtime.Serialization.NetDataContractSerializer совсем не собственный, а от MS и отличается от стандартного для WCF System.Runtime.Serialization.DataContractSerializer - только тем, что сериализует иформацию о типах, которая позволяет корректро десериализовать интерфейсные ссылки. Правда избыточность немного больше.
              Так что нужно его просто подключить для использования в определенные методы контрактов.

              Все как бы просто, но упущен один момент - соглашения. Если клиент будет не .NET, тяжко ему будет разбирать такие завалы, и авторы вышеупомянутой статьи этого не предусмотрели. А еще они не предусмотрели что коллекции могут быть lazy, и тогда теряется смысл передачи их между доменами.

              Сыровато пока, как на мой взгляд, хотя если напильником... :)
                :)
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0249 ]   [ 15 queries used ]   [ Generated: 19.05.24, 14:29 GMT ]