2009-08-28 66 views
0

假設我有這樣的域對象...NHibernate的域對象跨越多個表

public class SpansMultipleTables 
{ 
    public int CommonID {get; set;} 

    public string Table1Value {get; set;} 

    public int Table2Value {get; set;} 

    public float Table3Value {get; set;} 
} 
  • 的CommonID​​屬性映射到所有表上的「ID」欄。
  • 的Table1Value屬性映射到表「表1」中的「值」列
  • 的Table2Value屬性映射到表「表2」
  • 的Table3Value屬性映射的「值」列,以「值」列表中的列表「Table3」

使用FluentNHibernate,我該如何爲這個對象設置一個真正沒有中央表的地圖,因爲它是家?

回答

0

我不是專家,但我不確定NHibernate是否可以輕鬆處理這樣的映射。如果您能夠修改架構,您可能可以定義一個「主」表,它只有CommonID​​作爲主鍵。主表的類可以通過與主表的關係將其他表映射爲屬性。另一種選擇可能是將其中一個表指定爲主,並將其他表映射爲主類的屬性。在任何情況下,在這些表之間創建一些FK關係可能是一個好主意,以保證組合的「實體」不能單獨刪除其部分。

5

嘗試Join,但我會建議改變你的設計。

public class SpansMultipleTablesMap : ClassMap<SpansMultipleTables> 
{ 
    public SpansMultipleTablesMap() 
    { 
    Id(x => x.CommonID); 
    Join("Table1", m => 
    { 
     m.Map(x => x.Table1Value, "Value"); 
    }); 
    Join("Table2", m => 
    { 
     m.Map(x => x.Table2Value, "Value"); 
    }); 
    Join("Table3", m => 
    { 
     m.Map(x => x.Table3Value, "Value"); 
    }); 
    } 
} 
+0

+1我可能會被迫走這條路,因爲我的團隊的高級開發人員拒絕接受這是一個糟糕的,不可維護的設計。 –

+0

-1對於愚蠢的Snr Devs –

+0

///

///將此實體鏈接到另一個表,從兩個或多個表創建一個合成實體。這隻適用於如果您處於每個繼承層次結構中的策略。 /// ................................. 請閱讀智能感知文檔,爲您嘗試此操作。 – granadaCoder