我有一個包含POINT類型兩個屬性的類LINE。 我希望POINT是一個組件屬性。 如果LINE只包含1個POINT,這將是沒有問題的,但是由於它包含2個POINT,我認爲我需要區分它們(所以前綴或後綴可以應用於列名)。 我嘗試使用ComponentProperty標籤的PropertyName屬性,但仍然只有一組X和Y列在我的LINE表中生成。在一個類中同一類型的Nhibernate多個組件屬性
爲了清楚起見,我的目標是創建一個包含Point1_X,Point1_Y,Point2_X和Point2_Y列的LINE表。
我用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; }
}