Asp.net 使用where子句或多列映射的nHibernate多表映射
我在试着翻译一张桌子“RoomType” 我创建了一个“文本”表,其中包含:Asp.net 使用where子句或多列映射的nHibernate多表映射,asp.net,nhibernate,orm,mapping,translation,Asp.net,Nhibernate,Orm,Mapping,Translation,我在试着翻译一张桌子“RoomType” 我创建了一个“文本”表,其中包含: Id, LangID, TranslatedText 001, EN, Single 001, IT, Singola 002, EN, Double 002, IT, Doppia 这是数据库模式 表RoomType包含: ID,TextID,MaxBed 01, 001, 1 02,002,2 我需要创建一个连接RoomType和Text的nHibernate映射,并允许加载RoomType queing文本和
Id, LangID, TranslatedText
001, EN, Single
001, IT, Singola
002, EN, Double
002, IT, Doppia
这是数据库模式
表RoomType包含:
ID,TextID,MaxBed
01, 001, 1
02,002,2
我需要创建一个连接RoomType和Text的nHibernate映射,并允许加载RoomType queing文本和LandID=CurrentLanguage上的WHERE子句
这是一个小映射,但我不知道下一步如何操作:
public class RoomTypeaMap : ClassMapping<RoomType>
{
public RoomTypeaMap()
{
Join("Texts", el =>
{
el.Key(k => k.Column("TextID"));
});
}
}
公共类RoomTypeaMap:类映射
{
公共RoomTypeaMap()
{
连接(“文本”,el=>
{
el.Key(k=>k.Column(“TextID”);
});
}
}
作为替代,我可以为每种语言添加一列
在这个场景中,我需要映射从和(首选)不同的列获取roomtype的本地化名称
大概是这样的:
public class RoomTypeaMap : ClassMapping<RoomType>
{
public RoomTypeaMap()
{
Property(el => el.Name, m =>
{
m.Formula("Name_" + currentLanguage);
});
}
}
公共类RoomTypeaMap:类映射
{
公共RoomTypeaMap()
{
属性(el=>el.Name,m=>
{
m、 公式(“名称”+currentLanguage);
});
}
}
我发现了这篇有趣的帖子,但对我没有帮助:
谢谢你的帮助 我会去掉语言表,将文本表作为地图的元素表
public class RoomType
{
public virtual int Id { get; set; }
public virtual IDictionary<string, string> Names { get; private set; }
public virtual string Name
{
get { return Names[Thread.CurrentThread.CurrentUICulture.Name]; } // FIXME: fall back to default language if language not available
set { Names[Thread.CurrentThread.CurrentUICulture.Name] = value; }
}
}
更新:
实施回退
string name;
var currentlanguage = Thread.CurrentThread.CurrentUICulture; // eg en-US
if (!map.TryGetValue(currentlanguage.Name, out result) && // en-US
!map.TryGetValue(currentlanguage.Parent.Name, out result)) // en
{
result = "fallback name";
}
return name;
你链接到的文章包含很多选项。为什么没有帮助?
string name;
var currentlanguage = Thread.CurrentThread.CurrentUICulture; // eg en-US
if (!map.TryGetValue(currentlanguage.Name, out result) && // en-US
!map.TryGetValue(currentlanguage.Parent.Name, out result)) // en
{
result = "fallback name";
}
return name;