Отображение IDictionaryс MappingByCode - PullRequest
0 голосов
/ 13 февраля 2012

Как я могу отобразить IDictionary<Entity, Component>? Я сделал так:

Map<GeneralResourceType, Quantity>(x => x.BookedResources,
c =>
    {
        c.Key(ck => ck.Column("ProposedAction"));
        c.Table("BookedResources");
    },
k => k.ManyToMany(key => key.Column("ResourceTypeId")),
r => r.Component(qc => QuantityMapping.Mapping()));

(где GeneralResourceType - это сопоставленный объект, а количество - объект ValueObject). Но во время вызова BuildSession () выдается исключение:

NHibernate.MappingException: ассоциация из таблицы BookedResources ссылается на не отображенный класс: {MyNamespace} .Quantity. Похоже, что он пытается найти ClassMapping для количества, а часть значения отображается как компонент.

1 Ответ

0 голосов
/ 27 января 2014
  • Первый вариант:

    1. Компонент карты в отдельном классе, унаследованный от универсального класса ComponentMapping.
    2. Свойство словаря карты:

      Map(x => x.BookedResources, c =>
      {
          //any options access, cascade etc
      });
      
  • Второй вариант (встроенный):

    Map(x => x.BookedResources, x =>
        {
            //any options access, cascade etc
        },
        x => x.Element(),
        x => x.Component(c =>
        {
            c.Class<Quantity>();
            c.Property(p => p.Amount);
            c.Property(p => p.Unit);
            // any other properties
        }
    ));
    
...