流畅的NHibernate一对一映射插入问题

时间:2012-11-06 10:53:58

标签: c# nhibernate fluent-nhibernate foreign-key-relationship

在根据波纹管映射重新检索值时,一对一映射可以正常工作。但是在插入值时

  

无法解析属性: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");
}
}

请告诉我解决此问题需要哪些其他信息。我能够检索值,但当我插入值时,我无法。

此致 德斯蒙德

1 个答案:

答案 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

MasterData

public MasterDataMap()
{
   Id(x => x.MasterDataID).Column("MasterDataID")
     .GeneratedBy.gui.Sequence("MASTER_DATA_SEQ");
   Map(x => x.Name).Column("Name");
   HasOne(x => x.OtherData);
}

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格式获取

MasterData

 <class name="MasterData" ...>
  ...
  <one-to-one cascade="delete-orphan" lazy="proxy" name="OtherData />
  ..
 </class>

OtherData

<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>