如何使用 FluentMap 进行一对多映射?

How can you do one to many mapping with FluentMap?

我刚开始使用 FluentMap,我希望将同一列映射到 2 个属性,因为它们需要相同的值。这是我的地图:

internal class DefaultsMap : EntityMap<Defaults>
{
    internal DefaultsMap()
    {
        Map(d => d.HistoricalValues.Cost).ToColumn("defaultValue");
        Map(d => d.FutureValues.Cost).ToColumn("defaultValue");
        //other mappings...
    }
}

这将引发以下错误:

Exception: Duplicate mapping detected. Property 'Cost' is already mapped to column 'Cost'.

看来我无法将同一列映射到 2 个不同的属性,或者这是因为属性本​​身被称为同一事物(成本)?

不适合短小精悍;我在使用 NHibernate 时遇到了这个问题。

我不确定这一点,但如果 key-value 喜欢数据结构,映射器工具可能会以某种方式存储您的映射。

也就是说,您不能存储两个同名的不同密钥。

即使这不是真的,很明显映射器必须需要不同的命名来识别映射是不同的。它不查看定义了 属性 的 class;它只查看 属性 名称。

您可以考虑重命名您的属性以明确命名它们,如下所示:

HistoricalValues.Cost => HistoricalValues.HistoricalCost
FutureValues.Cost => FutureValues.FutureCost

根据 Amit Joshi 的回答,在当前形式下这似乎不可能,因为映射器必须具有不同的命名。不幸的是,我无法只为其中一个列重命名列,因为查询从通用 table 返回所有值以创建默认对象列表。

作为一种解决方法,在这种情况下,我已经能够通过为其中一个分配 属性 和 'Value' 属性 来实现我想要的'Cost' 属性 另一个像这样:

Map(d => d.HistoricalValues.Cost).ToColumn("defaultValue");
Map(d => d.FutureValues.Cost.Value).ToColumn("defaultValue");