Указание таблицы для сопоставления отношений HasMany () в FluentNHibernate - PullRequest
1 голос
/ 01 апреля 2011

У меня есть отображение в FluentNHibernate для отношения HasMany, и я хотел бы указать в нем таблицу для переопределения таблицы по умолчанию, которую nHibernate будет искать, чтобы найти те объекты, которые у меня есть много.Имеет ли это смысл?

Итак, допустим, у меня есть таблица для счетов-фактур и таблица для InvoiceItems. Допустим, у меня есть таблица с именем InvoiceItemsTwo.

У меня есть класс для Invoice и класс дляInvoiceItems, а также их сопоставления довольно просты.Я хотел бы указать в моем отображении для Invoice, что он должен искать свои элементы в InvoiceItemsTwo вместо InvoiceItems по умолчанию.

Так что мое отображение этих отношений выглядит следующим образом

HasMany(c => c.InvoiceItems).Cascade.SaveUpdate().Table("InvoiceItemsTwo");

Но это не работает.Я продолжаю получать сообщение об ошибке с моего веб-сайта во время выполнения, в котором указано неверное имя объекта «InvoiceItems».

Почему игнорируется тот факт, что я явно указываю таблицу в своем сопоставлении для отношения?

Я попытался сбросить отображение во время выполнения, и оно настраивается примерно так

<bag cascade="save-update" table="InvoiceItemsTwo">

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 01 апреля 2011

Атрибут table применяется только к отношениям «многие ко многим», а не «один ко многим».

0 голосов
/ 01 апреля 2011

Вы можете отобразить список как составной элемент вместо отношения один ко многим, а затем сопоставить его с другой таблицей. Но это не очень хорошая идея . Учтите, что NH должен знать, где хранить объект, который находится в памяти. Так что может случиться так, что объект хранится не в той таблице.

  • Либо сохраняйте все элементы InvoiceItems в отдельных таблицах, используя составной элемент, а не один-ко-многим, и компоненты вместо многих-к-одному (однако это называется в Fluent).
  • Или сохраните все InvoiceItems в одной таблице и используйте регулярные ссылки.
0 голосов
/ 01 апреля 2011

вы не можете указать другую таблицу в вашем классе отображения.Свободный NHibernate использует класс, отображенный в списке свойств (InvoiceItems).Если вы хотите использовать другой класс для сопоставления вашей таблицы данных, вы должны создать класс InvoceItemsTwo и отобразить его в своем классе основной таблицы.

...