1

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

无法解析属性:MasterData

被抛出。

下表列出

MasterDataTable [MasterDataID (PK), 名称]

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");
}
}

请让我知道解决此问题还需要哪些其他信息。我能够检索值,但是当我插入值时我不能。

问候, 戴斯蒙德

4

1 回答 1

0

在您的情况下,将存在一对一的映射(MasterData唯一 ID 可能只有一个实例,也可能只有一个OtherData)。在这种情况下,从属实体OtherData还必须引用其主控 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>
于 2012-11-06T11:22:37.527 回答