12

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

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

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

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

出于显而易见的原因,我也真的不想要一个表格“字符串”。

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

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

我完全希望这些值存储在另一个表中。我想也许我可能已经能够设置一些自动映射约定来指示 NHibernate '如果你看到一个class X包含List<*some primitive type*>,然后继续并自动创建一个映射到这个集合的引用表。

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

4

3 回答 3

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

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

于 2009-12-22T22:04:46.197 回答
4

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

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

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

于 2010-10-04T23:12:28.990 回答
1

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

于 2009-12-21T22:39:20.027 回答