2009-06-24 41 views
4

我有一個流利的nhiberbate將兩個表映射到一個類的問題。如何在流利的NHibernate中將兩個表映射到一個類

我有以下的數據庫模式:

TABLE dbo.LocationName 
(
    LocationId INT PRIMARY KEY, 
    LanguageId INT PRIMARY KEY, 
    Name VARCHAR(200) 
) 

TABLE dbo.Language 
(
    LanguageId INT PRIMARY KEY, 
    Locale CHAR(5) 
) 

,希望建設下面的類定義:

public class LocationName 
{ 
     public virtual int LocationId { get; private set; } 
     public virtual int LanguageId { get; private set; } 
     public virtual string Name { get; set; } 
     public virtual string Locale { get; set; } 
} 

這裏是我的映射類:

public LocalisedNameMap() 
    { 
    WithTable("LocationName"); 
    UseCompositeId() 
     .WithKeyProperty(x => x.LanguageId) 
     .WithKeyProperty(x => x.LocationId); 
    Map(x => x.Name); 

    WithTable("Language", lang => 
          { 
           lang.WithKeyColumn("LanguageId"); 
           lang.Map(x => x.Locale); 
          }); 
    } 

的問題是與來自另一個表的Locale字段的映射,特別是關鍵字之間如果這些表不匹配。每當我跑這個映射我啓動時獲取以下錯誤的應用程序:

外鍵 (FK7FC009CCEEA10EEE:語言 [LanguageId]))必須爲被引用的主 鍵列的相同數量的 (LOCATIONNAME [LanguageId, LocationId])

如何告訴nHibernate使用LanguageId字段從LocationName映射到語言?

+3

您正試圖在對象中對數據進行非規範化處理......我只是不認爲這會發生,並且它有點違背了ORM的目的。我想你總是可以使表格變得非規範化。 – 2009-06-24 16:46:31

+2

你真的想要在**一個**類中,還是可以接受一個`LocationName`類和`Language`類?在這種情況下,您可以使用`References()`方法映射關係。 – 2012-09-18 12:31:12

回答

相關問題