1

以下のマッピングに基づいて値を取得する場合、1対1のマッピングは正常に機能します。しかし、値を挿入するとき

プロパティを解決できません: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");
}
}

これを解決するために必要な他の情報を教えてください。値を取得することはできますが、値を挿入するとできません。

よろしく、デズモンド

4

1 に答える 1

0

あなたの場合、1対1のマッピングがあります(MasterData一意のIDに対して1つのインスタンスと1つのインスタンスしか存在しない可能性がありますOtherData)。この場合、スレーブエンティティOtherDataもそのマスターを参照する必要があります。 MasterData

public class OtherData
{
  public virtual long MasterDataID {get;set;}
  public virtual string OtherName {get;set;}
  public virtual MasterData MasterData {get;set;}
}

次に、このリンクに従って、1 対 1 で正しくマッピングできます: 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 に答える