我刚刚开始使用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个不同的属性,或者这是因为属性本身称为同一件事(成本)?
答案 0 :(得分:1)
不搭配精致的衣服;我在NHibernate中遇到了这个问题。
我不确定这一点,但可能是映射器工具以键值之类的数据结构形式存储您的映射。
也就是说,您不能存储两个具有相同名称的不同密钥。
即使这不是真的,很明显,映射器也必须需要不同的命名来识别映射是不同的。它不会查看为其定义属性的类;它只是查看属性名称。
您可以考虑重命名属性,以明确命名它们,如下所示:
HistoricalValues.Cost => HistoricalValues.HistoricalCost
FutureValues.Cost => FutureValues.FutureCost
答案 1 :(得分:0)
根据阿米特·乔希(Amit Joshi)的回答,由于映射器必须具有不同的命名,因此以当前的形式看来这不可能。不幸的是,由于查询要从通用表返回所有值以创建Defaults对象列表,因此我无法仅为其中之一重命名该列。
作为一种解决方法,在这种情况下,我可以通过为其中一个分配属性,为另一个分配给“成本”属性的“值”属性来实现我想要的:>
Map(d => d.HistoricalValues.Cost).ToColumn("defaultValue");
Map(d => d.FutureValues.Cost.Value).ToColumn("defaultValue");