如何在Fluent NHibernate中将两个表映射到一个类
我对fluent nhiberbate将两个表映射到一个类有问题 我有以下数据库架构:如何在Fluent NHibernate中将两个表映射到一个类,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我对fluent 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 Lo
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[语言ID,
位置ID])
如何让nHibernate仅使用LanguageId字段从LocationName映射到Language?您可以使用(不知道FNH中的名称)来反规范化类,即从另一个表中引入列。请看您正在尝试对对象中的数据进行非规范化…我只是认为这不会发生,这有点违背了ORM的目的。我想,您总是可以对表进行非规范化。您真的希望在一个类中实现这一点,还是可以接受使用
LocationName
类和语言
类?在这种情况下,您可以使用References()
方法映射关系。我已经好几年没有使用fluent了,现在我开始使用代码进行内部映射。但要点是,你需要将PK的一部分作为参考。我的意思是,你可以使用“加入”。