在根据波纹管映射重新检索值时,一对一映射可以正常工作。但是在插入值时
无法解析属性:MasterData
被抛出。
表格列在下面
MasterDataTable [MasterDataID(PK),Name]
OtherDataTable [MasterDataID(PK)(FK),OtherName]
流利的NHibernare课程
Public class MasterData{
public virtual long MasterDataID {get;set;}
public virtual string Name {get;set;}
public virtual OtherData OtherDataProp {get;set;}
}
public class OtherData{
public virtual long MasterDataID {get;set;}
public virtual string OtherName {get;set;}
}
public class MasterDataMap: ClassMap<MasterData>{
public MasterDataMap(){
//table declaration
Id(x => x.MasterDataID).Column("MasterDataID").GeneratedBy.gui.Sequence("MASTER_DATA_SEQ");
Map(x => x.Name).Column("Name");
}
}
public class OtherDataMap: ClassMap<OtherData>{
public OtherDataMap(){
//table declaration
Id(x => x.MasterDataID, "MASTER_DATA_ID").GeneratedBy.Foreign("MasterData")
Map(x => x.Name).Column("OtherName");
}
}
请告诉我解决此问题需要哪些其他信息。我能够检索值,但当我插入值时,我无法。
此致 德斯蒙德
答案 0 :(得分:0)
在您的情况下,将存在一对一映射(唯一ID可能只有一个MasterData
实例,而且只有一个OtherData
)。
在这种情况下, slave 实体OtherData
也必须引用其 master MasterData
public class OtherData
{
public virtual long MasterDataID {get;set;}
public virtual string OtherName {get;set;}
public virtual MasterData MasterData {get;set;}
}
然后我们可以按照此链接正确映射一对一: https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping
public MasterDataMap()
{
Id(x => x.MasterDataID).Column("MasterDataID")
.GeneratedBy.gui.Sequence("MASTER_DATA_SEQ");
Map(x => x.Name).Column("Name");
HasOne(x => x.OtherData);
}
public OtherDataMap()
{
Id(x => x.MasterDataID, "MasterDataID")
.GeneratedBy.Foreign("MasterData")
Map(x => x.OtherName).Column("OtherName"); // change from x.Name
HasOne(x => x.MasterData);
}
我们要努力实现的是以XML格式获取
<class name="MasterData" ...>
...
<one-to-one cascade="delete-orphan" lazy="proxy" name="OtherData />
..
</class>
<class name="OtherData" ...>
<id name="MasterDataID" column="MasterDataId">
<generator class="foreign">
<param name="property">MasterData</param>
</generator>
</id>
<one-to-one name="MasterData" constrained="true" />
...
</class>