C# 设置nHibernate以获取翻译
我正试图建立NHibernate,以便根据我提供的巫婆语言ID获得翻译 我有一个类似这样的类:C# 设置nHibernate以获取翻译,c#,nhibernate,conventions,C#,Nhibernate,Conventions,我正试图建立NHibernate,以便根据我提供的巫婆语言ID获得翻译 我有一个类似这样的类: public class Location { public virtual Guid Id { get; set; } [Translate("Name")] public virtual string Name { get; set; } [Translate("Description")] public virtual string Descripti
public class Location
{
public virtual Guid Id { get; set; }
[Translate("Name")]
public virtual string Name { get; set; }
[Translate("Description")]
public virtual string Description { get; set; }
public virtual bool Popular { get; set; }
public virtual bool Active { get; set; }
}
[AttributeUsage(AttributeTargets.Property)]
public class TranslateAttribute : Attribute
{
public readonly string DatabaseSuffix;
public TranslateAttribute(string databaseSuffix)
{
DatabaseSuffix = databaseSuffix;
}
public string GetSuffix()
{
return DatabaseSuffix;
}
}
我的Translate属性如下所示:
public class Location
{
public virtual Guid Id { get; set; }
[Translate("Name")]
public virtual string Name { get; set; }
[Translate("Description")]
public virtual string Description { get; set; }
public virtual bool Popular { get; set; }
public virtual bool Active { get; set; }
}
[AttributeUsage(AttributeTargets.Property)]
public class TranslateAttribute : Attribute
{
public readonly string DatabaseSuffix;
public TranslateAttribute(string databaseSuffix)
{
DatabaseSuffix = databaseSuffix;
}
public string GetSuffix()
{
return DatabaseSuffix;
}
}
我还知道我目前使用的语言:
public interface ILanguageProvider
{
void SetLanguage(string language);
string GetCurrentLanguage();
}
我希望使用约定设置nhibernate,以便在获取具有Translate属性的属性的任何内容时,它应该针对每个属性对我的Translations表进行如下查询(或者一次获取所有翻译):
并将它得到的结果设置回它得到翻译的属性
这可能吗?我如何实现这一点
我使用的是nHibernate 3.3.1.4000和Fluent nHibernate 1.3.0.733,我不会神奇地做到这一点 使用字典和提供当前名称的属性。这样做的好处是,如果语言发生更改,所有对象都可以获得正确的翻译
public class MyClass1
{
protected virtual IDictionary<string, string> Names { get; private set; }
public virtual string Name { get { return Names[GetCurrentLanguageFromSomeWhere()]; } }
}
public class MyClass1Map : ClassMap<MyClass1>
{
public MyClass1Map()
{
[...]
HasMany(mc => mc.Names)
.Table("Translations")
.Where("property == 'Name'")
.AsMap("language")
.Element("text")
.Not.LazyLoad();
HasMany(mc => mc.Descriptions)
.Table("Translations")
.Where("property == 'Description'")
.AsMap("language")
.Element("text")
.Not.LazyLoad();
}
}
我不会神奇地这样做 使用字典和提供当前名称的属性。这样做的好处是,如果语言发生更改,所有对象都可以获得正确的翻译
public class MyClass1
{
protected virtual IDictionary<string, string> Names { get; private set; }
public virtual string Name { get { return Names[GetCurrentLanguageFromSomeWhere()]; } }
}
public class MyClass1Map : ClassMap<MyClass1>
{
public MyClass1Map()
{
[...]
HasMany(mc => mc.Names)
.Table("Translations")
.Where("property == 'Name'")
.AsMap("language")
.Element("text")
.Not.LazyLoad();
HasMany(mc => mc.Descriptions)
.Table("Translations")
.Where("property == 'Description'")
.AsMap("language")
.Element("text")
.Not.LazyLoad();
}
}