Как вы можете сделать отображение один ко многим с помощью 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 ответа
Согласно ответу Амита Джоши, это не похоже на то, что это возможно в его нынешнем виде, так как картограф должен иметь разные имена. К сожалению, я не могу переименовать столбец только для одного из них, так как запрос возвращает все значения из общей таблицы, чтобы создать список объектов по умолчанию.
Как обходной путь, в этом случае я смог достичь того, что хотел, назначив свойству для одного из них и свойству "Value" свойства "Cost" для другого, например:
Map(d => d.HistoricalValues.Cost).ToColumn("defaultValue");
Map(d => d.FutureValues.Cost.Value).ToColumn("defaultValue");
Не с щегольским; У меня была эта проблема с NHibernate.
Я не уверен в этом, но, возможно, инструмент mapper хранит ваши отображения в некотором роде, если ключ-значение, как структура данных.
Тем не менее, вы не можете хранить два разных ключа с одинаковым именем.
Даже если это не так, очевидно, что картограф должен требовать отдельного именования, чтобы определить, что карта отличается. Он не смотрит на класс, для которого определено свойство; это просто смотрит на имя свойства.
Вы можете переименовать свои свойства, чтобы назвать их явно, как показано ниже:
HistoricalValues.Cost => HistoricalValues.HistoricalCost
FutureValues.Cost => FutureValues.FutureCost