Fluent NHIbernate自动化List <string>?</string>

时间:2009-12-21 19:13:36

标签: nhibernate fluent-nhibernate automapping

Fluent NHibernate不喜欢这样,抛出一个错误:

  

{“关联引用未映射的类:System.String”}

好的,我明白为什么这会导致问题 - 但最好的解决办法是什么?

我真的不希望它在单个字段中存储分隔符的字符串列表,如果我的列表包含许多字符串,这会变得很难看。

由于显而易见的原因,我也不太想要一个表'字符串'。

我想我可以通过将List<string>包装在一个类中来解决这个问题,但这感觉有点重量级。我开始认为它是最好的解决方案。

让Fluent NHibernate处理这个问题的最佳方法是什么?

我完全希望这些值存储在另一个表中。我想也许我可能已经能够设置一些指示NHibernate的自动化约定'如果你看到包含class X的{​​{1}},那么继续并自动创建一个映射到这个集合的引用表。

将一个集合中的每个集合包装起来感觉有点沉重。如果这是最好的解决方案,那么就这样吧。

3 个答案:

答案 0 :(得分:7)

几个星期前我有同样的问题,浮点数不是字符串。

how-do-you-automap-listfloat-or-float-with-fluent-nhibernate

事实证明,Automapping不适用于原始类型。

编辑 - 这已不再适用 - FNH团队已解决问题

在我的问题的接受答案中有很多示例代码,但关键点是为基本类型列表添加覆盖(下例中的“RawY”):

public class DlsAppOverlordExportRunData
{
    public virtual int Id { get; set; }
    // Note: List<float> needs overrides in order to be mapped by NHibernate.
    // See class DlsAppOverlordExportRunDataMap.
    public virtual IList<float> RawY { get; set; }
}


// Must be in different namespace from DlsAppOverlordExportRunData!!!
public class DlsAppOverlordExportRunDataMap : IAutoMappingOverride<DlsAppOverlordExportRunData>
{
    public void Override(AutoMapping<DlsAppOverlordExportRunData> mapping)
    {
        // Creates table called "RawY", with primary key
        // "DlsAppOverlordExportRunData_Id", and numeric column "Value"
        mapping.HasMany(x => x.RawY)
               .Element("Value");
    }
}

我希望使用相同的方法来处理字符串的IList。

答案 1 :(得分:4)

自从我发布第一个答案以来,Fluent NHibernate团队已经解决了这个问题。

现在,您可以自动执行C#值类型的IList(字符串,整数,浮点数等)。

请确保您拥有最新版本的FNH。

答案 2 :(得分:1)

这样想吧......如果没有休眠,你会怎么做?好吧,你可能有一个带有外键和字符串列的表?现在,你如何使用Hibernate做到这一点?您使用多对一和字符串属性设置另一个类。然后映射该类的集合。