2

我刚刚开始使用 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 个不同的属性,或者这是因为属性本​​身被称为相同的东西(成本)?

4

2 回答 2

1

不是用精致的; 我在使用 NHibernate 时遇到了这个问题。

我不确定这一点,但如果像数据结构这样的键值对,映射器工具可能会以某种方式存储您的映射。

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

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

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

HistoricalValues.Cost => HistoricalValues.HistoricalCost
FutureValues.Cost => FutureValues.FutureCost
于 2019-06-14T07:01:46.547 回答
0

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

作为一种解决方法,在这种情况下,我已经能够通过为其中一个分配属性以及为另一个分配“成本”属性的“价值”属性来实现我想要的,如下所示:

Map(d => d.HistoricalValues.Cost).ToColumn("defaultValue");
Map(d => d.FutureValues.Cost.Value).ToColumn("defaultValue");
于 2019-06-14T09:42:40.433 回答