Asp.net 使用where子句或多列映射的nHibernate多表映射

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文本和

我在试着翻译一张桌子“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文本和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;