У меня есть компания, у которой много заказов. Я сопоставил их как следующие друг за другом:
Компания
HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse();
Заказ
References(x => x.Company).Column("CompanyID")
Однако, когда я создаю новый заказ для компании и пытаюсь его сохранить, я получаю ошибку SQL :«Невозможно вставить значение NULL в столбец «Идентификатор компании», таблица «Заказы»; столбец не допускает пустых значений. INSERT не работает. "
(это сгенерированный оператор SQL :INSERT INTO Order (Name, CompanyID )VALUES (?, ? ); выберите ОБЛАСТЬ _ИДЕНТИФИКАЦИЯ ()]])
Что является логической ошибкой, потому что действительно я установил, что CompanyID не может быть нулевым.
Однако с обратным я ожидал, что CompanyID будет заполнен правильным идентификатором, но, черт возьми, я не могу заставить его работать.Я попытался удалить инверсию (, поведение вообще не изменилось ), изменил каскад, установил ссылку, которая не может быть нулевой.
Я даже сделал столбец в таблице обнуляемым, чтобы позабавить NHibernate. Но это оставило меня с осиротевшим Орденом, поскольку он действительно создал запись Ордена, но оставил CompanyID NULL.
Это мой тестовый код, где я сделал новый заказ:
Company test = RepositoryBase<Company>.GetById(1);
test.Orders.Add(new Order("test"));
RepositoryBase<Company>.SaveWithTransaction(test);
Обновления кстати прошли все нормально.
В любом случае, я надеюсь, что кто-то здесь увидит, что я сделал неправильно в моем отображении.
Заранее спасибо.