【问题标题】:Fluent NHibernate mappings for localization用于本地化的流畅 NHibernate 映射
【发布时间】:2023-04-06 19:06:02
【问题描述】:

我正在尝试从 NHibernate 映射构建数据库,但遇到了问题。

我有许多具有本地化字符串值的类:

public class MyClass1 {
    public virtual int Id { get; set; }
    public virtual ShortString Name { get; set; }
    public virtual LongString Description { get; set; }
}

public class MyClass2 {
    public virtual int Id { get; set; }
    public virtual ShortString Name { get; set; }
    public virtual LongString Description { get; set; }
}

和类似的语言

public class Language {
    public virtual string Code { get; set }
    public virtual string Name { get; set }
}

我的 ShortString 和 LongString 类看起来都一样:

public class ShortString {
    public virtual int Id { get; set; }
    public virtual IDictionary<Language, string> Values { get; set; }
}

我想要实现的是两个表(ShortString 和 LongString),如下所示:

TABLE ShortString
-----------------
Id (int)
LanguageCode (nvarchar(8))
Value (nvarchar(256)) (or ntext for the LongString Table)

...以 Id 和 LanguageCode 作为主键和语言表的 ForeignKey。

在 MyClass1 和 MyClass2 表中,我希望将 NameId (int) 和 DescriptionId (int) 列分别映射到 ShortString 和 LongString 表。

我完全被困住了。我怎样才能做到这一点?

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping fluent


    【解决方案1】:

    也许你可以完全抛弃短弦和长弦

    public class MyClass1 {
        public virtual int Id { get; set; }
        public virtual IDictionary<Language, string> Name { get; set; }
        public virtual IDictionary<Language, string> Description { get; set; }
    }
    
    public class MyClass2 {
        public virtual int Id { get; set; }
        public virtual IDictionary<Language, string> Name { get; set; }
        public virtual IDictionary<Language, string> Description { get; set; }
    }
    

    并使用以下映射

    public class MyClass1Map : ClassMap<MyClass1>
    {
        public MyClass1Map()
        {
            [...]
            HasMany(mc => mc.Name)
                .Table("ShortString")
                .KeyColumn("id")
                .AsEntityMap("language_id")
                .Element("value")
            HasMany(mc => mc.Description)
                .Table("LongString")
                .KeyColumn("id")
                .AsEntityMap("language_id")
                .Element("value", e => e.Length(1000))
        }
    }
    

    我现在无法测试它,所以可能需要调整

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2010-11-22
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多