У меня есть класс LINE, который содержит два свойства типа POINT. Я бы хотел, чтобы POINT был компонентом. Если LINE должен содержать только 1 POINT, это не проблема, но поскольку в нем содержится 2 POINT, я бы подумал, что мне нужно их различать (поэтому к именам столбцов можно применить префикс или суффикс). Я попытался использовать атрибут PropertyName тега ComponentProperty, но в моей таблице LINE создается только один набор столбцов X и Y.Nhibernate многокомпонентные свойства одного и того же типа в классе
Для большей ясности моя цель - иметь таблицу LINE с точками Point1_X, Point1_Y, Point2_X и Point2_Y.
Я использую Nhibernate.Mapping.Attributes, ниже вы можете увидеть мое отображение
[Class]
public class Line : EntityBase
{
[ComponentProperty(PropertyName = "Point1")]
public UiPoint Point1 { get; set; }
[ComponentProperty(PropertyName = "Point2")]
public UiPoint Point2 { get; set; }
//omitted the constructor
}
[Component]
public class UiPoint
{
[Property]
public double X { get; set; }
[Property]
public double Y { get; set; }
//omitted the constructor
}
В то же время я понял следующее отображение XML Виль решить мою проблему
<class name="Domain.WashProcessLine,Domain">
<id name="Id" />
<component name="Point1">
<property name="X" type="Double" column="Point1_X" />
<property name="Y" type="Double" column="Point1_Y" />
</component>
<component name="Point2">
<property name="X" type="Double" column="Point2_X" />
<property name="Y" type="Double" column="Point2_Y" />
</component>
</class>
найден вариант на https://www.hibernate.org/hib_docs/nhibernate/html/components.html
следующее тегирование создает желаемую структуру таблицы, но дает мне исключение кастинга (от UiPoint до IDictionary) при возврате свойства из базы данных.
Так что я не там полностью :(
[Class]
public class Line : EntityBase
{
[DynamicComponent(1)]
[Property(2, Name = "X", Column = "Point1_X", TypeType = typeof(double))]
[Property(3, Name = "Y", Column = "Point1_Y", TypeType = typeof(double))]
public UiPoint Point1 { get; set; }
[DataMember]
[DynamicComponent(1)]
[Property(2, Name = "X", Column = "Point2_X", TypeType = typeof(double))]
[Property(3, Name = "Y", Column = "Point2_Y",TypeType=typeof(double))]
public UiPoint Point2 { get; set; }
}