2011-06-21 39 views
6

Tôi gặp sự cố khi sử dụng ánh xạ một đối một. Tôi đã tìm kiếm trên internet và tìm thấy nhiều giải pháp nhưng không ai đáp ứng được. Hầu hết các ví dụ đều mang trên không lưu trữ cá thể cha mẹ trong lớp con.NHibernate One-To-One

Tôi muốn chỉ sử dụng ID mẹ trong lớp con có mối quan hệ ràng buộc khóa ngoài nhưng không muốn giữ bất kỳ cá thể gốc nào ở trẻ em.

Khi tôi cố gắng tải các bản ghi từ cơ sở dữ liệu, nó ném ngoại lệ "Không có hàng nào với số nhận dạng đã cho tồn tại [AssemblyName.]". Tuy nhiên, hồ sơ tồn tại trong Bảng "B" đúng cách.

Bất kỳ giải pháp nào cho vấn đề này?

Cấu trúc lớp:

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 } 

Cấu trúc cơ sở dữ liệu:

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] 

Các bản đồ:

<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> 

Trả lời

4

Liên kết một-một luôn luôn hai chiều trong NHibernate. Ánh xạ của lớp B chưa hoàn thành:

<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> 

Đây là tổ hợp khóa ngoài. Để biết thêm thông tin, hãy xem this bài đăng blog chi tiết của Ayende hoặc NHibernate documentation.

+0

Một lần nữa, như tôi đã nói trong bài trước .. đây là một trong những giải pháp không thỏa đáng. Dù sao cũng cảm ơn. – ni3a

+0

Bài đăng trước đó? –

0

đọc this. Một "thực" một-một trong những nhu cầu cùng một khóa chính trong cả hai bảng (và không có cột ParentId).