Отображение нескольких отношений один ко многим - PullRequest
0 голосов
/ 22 декабря 2011

Я новичок в NHibernate, и у меня есть задача улучшить проект с помощью существующей реализации. Текущий дизайн прост, как в «Первом проекте»:

store(1)->(many)Employee

Теперь я хочу сделать это:

store(1)->(many)Employee  AND
Empoyee(1)->(many)Child

Повторная реализация логики сопоставления от store-Employee к Employee-Child не работает. Пытался найти что-то похожее в сети, но не повезло. Любой совет по поводу сопоставления очень ценится.

Спасибо

@ MeckLey: Большое спасибо для ответа - Я пытаюсь проверить отображение, используя примеры постоянных спецификаций ... в псевдокоде я делаю что-то вроде:

new PersistenceSpecification<Child>(_session, new CustomEqualityComparerChild())
  .CheckProperty(c => c.Name, "Child1Name")
    --other Child prperties--
  .CheckReference(c => c.Employee, new Employee{
        Store = new Store{--store properties--},
          --other Employee Properties--
        });

Внешний ключ. В столбцы, которые не должны иметь значение NULL, вставляются значения NULL. Я пытаюсь сделать тест, чтобы все было создано в правильном порядке:

Store->Employee->Child

.. но я терплю неудачу

@ Мекли, ладно, вот реальная вещь ... store - это «ReturnOrder», «Employee» - это «ReturnOrderLineItem», а «Chlid» - это «ReturnOrderReplacementItem» Классы следуют точной структуре «FirstExample», а сопоставления выглядят следующим образом:

public ReturnOrderMap()
    {
        Id(x => x.Id);
        Map(x => x.OrderTrackingNumber);
        Map(x => x.UserId);

        HasMany(x => x.ReturnOrderLineItems).Inverse().Cascade.AllDeleteOrphan();
    }

 public ReturnOrderLineItemMap()
    {
        Id(x => x.Id);
        Map(x => x.Sku);
        Map(x => x.Status);
        Map(x => x.Comments);

        HasMany(x => x.ReturnOrderReplacementItems).Inverse().Cascade.AllDeleteOrphan();
        References(x => x.ReturnOrder);
    }

 public ReturnOrderReplacementItemMap()
    {
        Id(x => x.Id);
        Map(x => x.Quantity);
        Map(x => x.Size);
        References(x => x.ReturnOrderLineItem);
    }

Я пропущу тесты Mapping и попробую посмотреть, действительно ли это работает, может быть, вы не можете протестировать что-то подобное с помощью PesristenceSpecification ..

1 Ответ

0 голосов
/ 27 декабря 2011

ОК, все заработало. Я предоставляю некоторые подробности для тех, кто сталкивается с такой же задачей:

1) Сопоставление для дочернего элемента в EmployeeMap должно быть HasMany (x => x.Child) .Cascade.AllDeleteOrphan ();(БЕЗ Inverse)

2) В дочерней таблице разрешите NULLS для поля Foreignkey, чтобы было возможно удаление дочернего объекта

3) Сначала сохраните объект Store, который сохранит сотрудников, прикрепленных кзатем добавьте дочерние объекты в список Сотрудника

4) Создайте отдельный метод для сохранения экземпляра Empolyee - аналогично методу, который сохраняет экземпляр Store - который, в свою очередь, сохранит все дочерние объекты, добавленные вСписок дочерних объектов сотрудника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...