C# Fluent NHibernate一对一映射插入问题

C# Fluent NHibernate一对一映射插入问题,c#,nhibernate,fluent-nhibernate,foreign-key-relationship,C#,Nhibernate,Fluent Nhibernate,Foreign Key Relationship,在基于bellow映射检索值时,一对一映射可以很好地工作。但在插入值时 无法解析属性:MasterData 被抛出 表格如下所示 MasterDataTable[MasterDataID主键,名称] OtherDataTable[MasterDataID PKFK,OtherName] 流利的NHibernare课程包括 Public class MasterData{ public virtual long MasterDataID {get;set;} public virtual stri

在基于bellow映射检索值时,一对一映射可以很好地工作。但在插入值时

无法解析属性:MasterData

被抛出

表格如下所示

MasterDataTable[MasterDataID主键,名称]

OtherDataTable[MasterDataID PKFK,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");
}
}
请让我知道解决此问题还需要哪些其他信息。我可以检索值,但插入值时无法检索

问候,,
Desmond

在您的情况下,将有一个一对一的映射—唯一ID只能有一个MasterData实例,也只能有一个其他数据。 在这种情况下,从属实体OtherData也必须引用其主数据

然后,我们可以按照此链接正确映射一对一:

主数据 其他数据 我们试图实现的是以XML的形式实现这一点

主数据 其他数据
谢谢你的及时回复。是的,我尝试过这种方法,但是当我引用OtherData类中的MasterData时,由于循环引用,我得到了这个结果,基础连接被关闭:连接意外关闭。我使用WCF服务来检索数据。还有一点。即使主数据如您所说在其他数据中引用。当我插入记录时,我试图从null一对一属性:MasterData分配id。很抱歉打扰您,但我希望这能在将来帮助像我这样的人。这很可能是由于C中的引用设置不正确造成的。换句话说,这两行都必须有:master.OtherData=slave;slave.MasterData=master;在NHibernate持久化该初始化之前,必须在C代码中对其进行初始化。稍后读取数据时,将正确设置这些数据。对于插入,必须显式执行。有意义吗?在一对一映射中,如果没有主节点,从节点就无法生存。因为NHibernate使用主引用来查找将被重用的ID。请看这里如何做到我尝试了所有的文章和书籍参考,但无法解决。由于时间不多,我建立了一对多关系,解决了这个问题。谢谢你的努力。但实际上我看不出你在评论中说了什么。
public class OtherData
{
  public virtual long MasterDataID {get;set;}
  public virtual string OtherName {get;set;}
  public virtual MasterData MasterData {get;set;}
}
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);
}
 <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>