我使用一对一映射存在问题.我搜索过互联网并找到了许多解决方案,但没有一个令人满意.大多数示例都带有在子类中存储父实例的开销.
我想在具有外键约束关系的子类中仅使用父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 }
Run Code Online (Sandbox Code Playgroud)
数据库结构:
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]
Run Code Online (Sandbox Code Playgroud)
映射:
<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>
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
这是外键关联。有关更多信息,请参阅详细的 Ayende 博客文章或NHibernate 文档。
| 归档时间: |
|
| 查看次数: |
7568 次 |
| 最近记录: |