2010-06-02 31 views
10

我在兩個表之間有一個傳統的數據庫和一對一的關係。事情是關係使用兩列,而不是一列。有沒有辦法在nhibernate中說當得到一個被引用的實體時,它在連接語句中使用了兩列,而不是一個? 我有一個類似表結構與多列的多對一

TaskProgress

  • ProgressId
  • 的TaskID
  • AssignmentId
  • 用戶ID

個任務

  • 任務id
  • AssignmentId
  • TASKNAME

每個任務可以在不同的任務來asigned。這意味着任務進度的唯一任務只能由AssignmentId和TaskId字段創建。

我試圖用這個:

References(x => x.Template) 
      .Columns() 
      .PropertyRef() 

,但不能得到如何映射加入多個列,任何想法?

回答

5

我假設您在示例代碼中使用PropertyRef時,兩列不構成組合主鍵。如果是這樣的話,那麼你的運氣不好,因爲property-ref只能接受一個屬性。從issue NH-1722的評論來看,這個功能在Hibernate中顯然是可用的,但尚未被移植到NHibernate。

更新: 您添加的模式看起來像多任務和任務之間的附加數據關係的多對多。 TaskProgress是Task和Assignment之間的鏈接表。如果TaskProgress沒有額外的UserId字段,那麼你可以將它建模爲簡單的多對多。因爲鏈接表具有附加數據,所以它變得更復雜一些。

具有附加數據的多對多通常是通過創建表示鏈接表(TaskProgress)的對象並將關係建模爲兩個一對多關係來建模。也就是說,任務和分配與TaskProgress具有一對多的關係。 TaskProgress具有「任務」,「分配」和「用戶」的屬性。

+0

是否有任何解決方法,公式的用法也許? – Sly 2010-06-02 18:27:59

+0

沒有我所知道的。但是,你真的有1:1的關係,這與主鍵無關嗎?你能發佈足夠多的表格定義來說明問題嗎? – 2010-06-02 18:32:49

+0

我已更新初始文章以提供更多詳細信息 – Sly 2010-06-03 07:09:00