我遇到流利的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映射到语言?
答案 0 :(得分:0)
你可以在FNH中使用,不知道名称来对一个类进行非规范化,即从另一个表中引入一个列。见http://ayende.com/blog/3961/nhibernate-mapping-join