Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置nHibernate以获取翻译_C#_Nhibernate_Conventions - Fatal编程技术网

C# 设置nHibernate以获取翻译

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

我正试图建立NHibernate,以便根据我提供的巫婆语言ID获得翻译

我有一个类似这样的类:

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();
    }
}