Я немного застрял.
Проблема
NHibernate заставляет меня сделать столбец Foreignkey обнуляемым, что является очень плохой идеей для нашей базы данных идовольно некрасиво
Есть ли способ обойти это?
Ситуация
У меня есть следующие карты (имена изменены для простоты):
public class BillMap : SequenceGeneratedIdEntityMap<Bill>
{
public BillMap()
{
Id(x => x.Id).GeneratedBy.Native("BILL_SEQ");
... (maps) ...
HasMany<Expense>(f => f.Expense)
.Schema("ACCOUNT")
.Table("EXPENSE")
.KeyColumn("BILL")
.Cascade.All();
}
}
public class ExpenseMap : SequenceGeneratedIdEntityMap<Expense>
{
public ExpenseMap ()
{
Id(x => x.Id).GeneratedBy.Native("EXPENSE_SEQ");
... (maps) ...
}
}
Используя эти карты, я получаю следующее от NHibernate при сохранении экземпляра Билла:
select ACCOUNT.BILL_SEQ.nextval from dual
select ACCOUNT.EXPENSE_SEQ.nextval from dual
command 0:INSERT INTO ACCOUNT.BILL(...)
command 0:INSERT INTO ACCOUNT.EXPENSE(...)
command 0:UPDATE UPDATE.EXPENSE SET BILL = X WHERE ...
Обратите внимание на 2 вещи здесь:
- Все идентификаторы запрашиваютсяиз последовательностей ДО вставки.
- Иностранный ключ не обновляется, пока ПОСЛЕ не будет добавлен расход.
Это вынуждает меня сделать столбец обнуляемым И разрешить обновления таблицы.
В идеале оператор обновления не должен быть необходим и обрабатывает какое-то глубокое темное место внутри NHB :).
Эту проблему можно решить с помощью двунаправленной ссылки, но это разрушит мою модель: /.
Я верю, что это возвращающаяся проблема для меня (никогда прежде не находил хорошего решения).Есть кто-нибудь, кто знает об обходном пути?
С уважением