繁体   English   中英

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

[英]Fluent NHibernate one to one mapping insert issue

基于波纹管映射检索值时,一对一映射效果很好。 但是在插入值时

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

请让我知道需要其他什么信息来解决此问题。 我能够检索值,但是当我插入值时我无法。

问候,戴斯蒙德

在您的情况下,将存在一对一的映射(唯一ID可能只有一个MasterData实例,而另一个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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM