2009-06-24 103 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

回答