映射NHibernate中的结构化数据类
本文关键字:数据 结构化 NHibernate 映射 | 更新日期: 2023-09-27 18:17:46
我想将c#中的结构化数据类映射到NHibernate中的表
namespace X
{
[DataContract]
class StructureID
{
[DataMember] public string Value { get; set; }
}
[DataContract]
class StructureNR
{
[DataMember] public string Value { get; set; }
}
}
namespace Y
{
[DataContract]
class SubStructure
{
[DataMember] public string SomeData { get; set; }
[DataMember] public string MoreData { get; set; }
}
[DataContract]
class Structure
{
[DataMember] public StructureID StructureID { get; set; }
[DataMember] public SubStructure SubData { get; set; }
[DataMember] public string OtherData { get; set; }
}
}
表将包含这样的列:
CREATE TABLE Structures (
ID varchar(10) NOT NULL,
SOME varchar(50) DEFAULT NULL,
MORE varchar(50) DEFAULT NULL,
OTHER varchar(50) DEFAULT NULL,
PRIMARY KEY (ID)
);
StructureID和StructureNR类是语义包装器,可以让编译器分离"string"的不同含义,SubStructure将几个成员组合在一起。如何将Structure类映射到我的表以进行读写(到目前为止我们使用XML定义)?
您的解决方案应该遵循这些行,您将需要根据您的代码进行调整。
为id创建2个实体。然后,创建具有复合id的主实体,并通过一对一的关系进行连接。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="StructureID" table="Structures" >
<id name="Value">
<column name="ID"/>
<generator class="assigned"/>
</id>
</class>
<class name="StructureNR" table="Structures" >
<id name="Value">
<column name="ID"/>
<generator class="assigned"/>
</id> </class>
<class name="SubStructure" table="Structures" >
<composite-id name="StructureID" class="StructureID">
<key-property name="Value">
<column name="ID"></column>
</key-property>
</composite-id>
<property name="SomeData">
<column name="Some"/>
</property>
<property name="MoreData">
<column name="More"/>
</property>
</class>
<class name="Structure" table="Structures" >
<composite-id name="StructureID" class="StructureID">
<key-property name="Value">
<column name="ID"></column>
</key-property>
</composite-id>
<property name="OtherData">
<column name="Other"/>
</property>
<property name="Description">
<column name="Description"/>
</property>
<one-to-one name="SubData" class="SubStructure" />
</class>
</hibernate-mapping>