如何在Fluent NHibernate中将两个表映射到一个类

时间:2009-06-24 16:40:13

标签: nhibernate fluent-nhibernate nhibernate-mapping

我遇到流利的nhiberbate将两个表映射到一个类的问题。

我有以下数据库架构:

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]))必须具有相同的编号   列作为引用的主要   key(LocationName [LanguageId,   LocationId])

如何告诉nHibernate仅使用LanguageId字段从LocationName映射到语言?

1 个答案:

答案 0 :(得分:0)

你可以在FNH中使用,不知道名称来对一个类进行非规范化,即从另一个表中引入一个列。见http://ayende.com/blog/3961/nhibernate-mapping-join