Свободный NHibernate: подклассы внутри подклассов - PullRequest
2 голосов
/ 27 августа 2009

У меня есть различные виды продуктов. Теперь AppProduct имеет различные виды величин - умножение значений, список значений и т. Д. *

   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; }
   }

Вопрос: можно ли вообще сопоставлять с FNH или NH? В частности, с автоматическим отображением. Для меня было бы естественно отобразить продукты в их собственных таблицах, но количества были бы частью таблицы AppProducts ... то есть дискриминированы.

Я безуспешно пробовал разные подклассы, JoinedSubclass и т. Д., Каждый с разными исключениями NH. Это работает только тогда, когда обе иерархии по умолчанию отображаются с объединенным подклассом. Однако автомаппер не может автоматически сопоставить IList [int]. Если я устанавливаю IList [Product] (для тестирования), все работает отлично. Если я попытаюсь сохранить IList [int], используя это отображение:

   public class ListQuantityMap : IAutoMappingOverride<ListQuantity>
   {
      public void Override(AutoMap<ListQuantity> mapping)
      {
         mapping.HasMany(x => x.Quantities).AsElement("QuantitiesId");
      }
   }

если не удается с System.Xml.Schema.XmlSchemaValidationException: элемент 'class' в пространстве имен 'urn: nhibernate-mapping-2.2' имеет недопустимый дочерний элемент 'bag' в пространстве имен 'urn: nhibernate-mapping-2.2'. Список возможных ожидаемых элементов: 'meta, subselect, cache, синхронизации, комментарий, tuplizer, id, составной-id' в пространстве имен 'urn: nhibernate-mapping-2.2'.

хотя единственное различие в экспортированных Orders.Core.Quantity.hbm.xml заключается в типе класса один-ко-многим ... т.е. NHibernate не жалуется на bag почти в одном и том же отображении.
(примечание: это, вероятно, ошибка, исправленная в недавнем FNH, выпуск № 299).

В любом случае, присоединенный подкласс не является идеальным решением здесь. Я даже думаю о том, чтобы сделать только компонент в AppProduct и создать соответствующий объект количества самостоятельно, когда присваивается свойство «Количество-тип» ... хотя и слишком странно. Или, может быть, поможет переход на Linq2Sql? ; -)

1 Ответ

1 голос
/ 31 августа 2009

Я не уверен, чего вы пытаетесь достичь. Похоже, что могут быть некоторые проблемы с вашей объектной моделью. Например, похоже, у вас есть класс количества (в отличие от стандартного свойства, которое, возможно, происходит из int). Вы можете переосмыслить это.

Если вы обнаружите, что у вас возникли проблемы с AutoMapper, вы можете отступить и использовать стандартные (ручные) сопоставления в сочетании с соглашениями.

Я думаю, что проблема, скорее всего, связана с вашей объектной моделью, а не с проблемой Fluent-NHibernate.

Вы можете найти официальную свободную страницу в отображениях подклассов по адресу http://wiki.fluentnhibernate.org/Fluent_mapping.

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