Как вы можете сделать отображение один ко многим с помощью FluentMap? - PullRequest
2 голосов
/ 13 июня 2019

Я только начал использовать 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 различными свойствами, или это потому, чтоСами свойства называются одним и тем же (Cost)?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Не с щегольским;У меня была эта проблема с NHibernate.

Я не уверен в этом, но, возможно, инструмент mapper хранит ваши отображения в каком-то виде, если ключ-значение, как структура данных.

Тем не менее, вы не можете сохранитьдва разных ключа с одинаковыми именами.

Даже если это не так, очевидно, что мапперу необходимо иметь разные имена, чтобы определить, что карта отличается.Он не смотрит на класс, для которого определено свойство;он просто смотрит на имя свойства.

Вы можете рассмотреть возможность переименования ваших свойств, чтобы назвать их явно, как показано ниже:

HistoricalValues.Cost => HistoricalValues.HistoricalCost
FutureValues.Cost => FutureValues.FutureCost
0 голосов
/ 14 июня 2019

Согласно ответу Амита Джоши, в его нынешнем виде это не представляется возможным, поскольку картограф должен иметь разные имена.К сожалению, я не могу переименовать столбец только для одного из них, так как запрос возвращает все значения из общей таблицы для создания списка объектов по умолчанию.

В качестве обходного пути, в данном случае я 'я смог достичь того, что хотел, назначив свойству для одного из них и свойству «Value» свойства «Cost» для другого, например:

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