У меня есть различные виды продуктов. Теперь 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? ; -)