Fluent NHIbernate列表的自动映射<;字符串>;?

Fluent NHIbernate列表的自动映射<;字符串>;?,nhibernate,fluent-nhibernate,automapping,Nhibernate,Fluent Nhibernate,Automapping,Fluent NHibernate不喜欢这样,抛出一个错误: {“关联引用未映射的类:System.String”} 好吧,我明白为什么这会引起问题了——但最好的解决方案是什么 我真的不希望它在一个字段中存储一个带分隔符的字符串列表,如果我的列表包含许多字符串,这将变得很糟糕 出于显而易见的原因,我也不真正想要一个表“字符串” 我想我可以通过将我的列表包装在一个类中来解决这个问题,但这感觉有点沉重。我开始认为这是最好的解决办法 让流利的NHibernate处理这个问题的最佳方法是什么 我完全希望

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

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

好吧,我明白为什么这会引起问题了——但最好的解决方案是什么

我真的不希望它在一个字段中存储一个带分隔符的字符串列表,如果我的列表包含许多字符串,这将变得很糟糕

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

我想我可以通过将我的
列表
包装在一个类中来解决这个问题,但这感觉有点沉重。我开始认为这是最好的解决办法

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

我完全希望这些值存储在另一个表中。我想也许我已经能够设置一些自动映射约定,指示NHibernate“如果您看到包含
列表的
类X
,那么继续并自动创建映射到此集合的引用表


在课堂上整理每一个集合感觉有点沉重。然而,如果这是最好的解决办法,那就这样吧

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

几周前,我也有过同样的问题,使用浮点而不是字符串

事实证明,自动映射不适用于基本类型

编辑-这不再是事实-FNH团队已修复该问题

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

公共类DlsAppOverlordExportRunData
{
公共虚拟整数Id{get;set;}
//注意:列表需要重写才能由NHibernate映射。
//请参见类DlsAppOverlordExportRunDataMap。
公共虚拟IList RawY{get;set;}
}
//必须与DlsAppOverlordExportRunData位于不同的命名空间中!!!
公共类DlsAppOverlordExportRunDataMap:IAutoMappingOverride
{
公共无效替代(自动映射)
{
//使用主键创建名为“RawY”的表
//“DlsAppOverlordExportRunData_Id”和数字列“值”
mapping.HasMany(x=>x.RawY)
.要素(“价值”);
}
}

我希望用同样的方法处理字符串的ILists。

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

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


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

如果您不希望它作为分隔字符串出现在单个字段中,也不希望它出现在另一个表中,那么在哪里?这仍然是一个关系数据库…我不在乎关系数据库如何处理它。我想知道如何让自动映射推断这是我想对域模型中的所有字符串列表执行的操作。@Alex-据我所知,无法告诉Fluent NHibernate如何映射所有字符串列表。我在回答中提供的解决方案需要覆盖域模型中的每个字符串列表。每个覆盖只需要几行代码,所以还不算太糟……我今天遇到了这个问题,并找到了一个更简单的解决方案(带有国家代码列表的地区):HasMany(x=>x.Countries).KeyColumn(“CNTRY_Region_CD”).Element(“value”);好的,我明白了。我只是不喜欢创建所有这些简单的类来包装原始集合。我可以让自动映射为我推断这个吗?哦,那么你不需要创建另一个类了?我认为这是可能的。。。看看他们是如何给出一组整数的示例的,看起来像是你做了一个常规的集合,然后为你的字符串定义了一个元素属性。这是可以通过约定来定义的吗?FNH似乎专注于定制自动映射的约定。我不这么认为。我通过在流畅的邮件列表上提问得到了答案,我相信是FNH的一位作者给了我答案。如果这可以通过一次会议来完成,我想他会建议的。唉,对于我的需求来说,这已经晚了将近一年了——尽管看到FNH实现这一点很好,但这是我在大型LOB应用程序中使用它时遇到的唯一真正障碍。感谢Tom一年后回来提供此更新。
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");
    }
}