Nhibernate 一对一

Nhibernate 一对一,nhibernate,Nhibernate,我在使用一对一映射时遇到了一个问题。我在互联网上搜索了很多解决方案,但没有一个是令人满意的。大多数示例都有在子类中存储父实例的开销 我只想在具有外键约束关系的子类中使用父Id,但不想在子类中保留任何父实例 当我尝试从数据库加载记录时,它抛出异常“不存在具有给定标识符的行[AssemblyName.]”。但是,该记录正确地存在于表“B”中 这个问题有什么解决办法吗 班级结构: class A { public virtual string Id {get;set;} public virtua

我在使用一对一映射时遇到了一个问题。我在互联网上搜索了很多解决方案,但没有一个是令人满意的。大多数示例都有在子类中存储父实例的开销

我只想在具有外键约束关系的子类中使用父Id,但不想在子类中保留任何父实例

当我尝试从数据库加载记录时,它抛出异常“不存在具有给定标识符的行[AssemblyName.]”。但是,该记录正确地存在于表“B”中

这个问题有什么解决办法吗

班级结构:

class A { 
public virtual string Id {get;set;} 
public virtual B B {get;set;} // properties...... } 

class B { public virtual string Id {get;set;} // properties...... 
public virtual string ParentId { get;set;} // class A Id }
数据库结构:

CREATE TABLE [A]( 
    [Id] [nvarchar](45) PRIMARY KEY
) ON [PRIMARY] 

CREATE TABLE [B]( 
    [Id] [nvarchar](45) PRIMARY KEY, 
    [ParentId] [nvarchar](45) NOT NULL
) ON [PRIMARY]
映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
<class name="A,AssemblyName" table="A" lazy="true">
<id name="Id" column="Id" type="string"> 
<generator class="assigned"/> 
</id> 
<one-to-one name="_B" cascade="all" fetch="join" foreign-key="None" constrained="true" class="B"/> 
</class> 
</hibernate-mapping>


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="B,AssemblyName" table="B" lazy="true"> 
<id name="Id" column="Id" type="string"> <generator class="assigned"/> </id>
<property name="_Name" column="Name"/> </class> 
</hibernate-mapping>

读取。“真正的”一对一在两个表中都需要相同的主键(并且没有ParentId列)。

在NHibernate中,一对一关联始终是双向的。B类映射不完整:

<class name="B,AssemblyName" table="B" lazy="true"> 
   <id name="Id" column="Id" type="string">
      <generator class="assigned"/>
   </id>
   <many-to-one name="A" unique="true" column="A" />
   <property name="_Name" column="Name"/>
</class>


这是外键协会。有关更多信息,请参阅详细的Ayende的博客帖子或。

再次,正如我在前面的帖子中所说。。这是一个不令人满意的解决方案。谢谢你。