У меня очень простые однонаправленные сопоставления. см. ниже:
public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}
public PhoneNumberMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Number);
Table("ContactNumbers");
}
Согласно этому сообщению после nhibernate 3 и выше, установка ключа как не -nullable должна исправить проблему обновления вставки -(Проблема, когда NHibernate выдает вставку с внешним ключом, установленным на ноль затем обновление для обновления внешнего ключа до правильного значения ), но это не для меня. Когда я устанавливаю ключ как необнуляемый, NHibernate выдает правильный оператор вставки
INSERT INTO ContactNumbers
(Number,
ContactId)
VALUES ('(212) 121-212' /* @p0 */,
10 /* @p1 */);
Как видите, он вставляет поле ContactId, но после этого все еще выдает оператор обновления
UPDATE ContactNumbers
SET ContactId = 10 /* @p0 */
WHERE Id = 34 /* @p1 */
Итак, для уточнения проблемы. NHibernate вставляет строку Contact с правильно назначенным внешним ключом и после этого выдает оператор обновления для обновления внешнего ключа (ContactId ), который является избыточным.
Как я могу избавиться от этого избыточного оператора обновления? Спасибо.
Кстати, я использую последнюю версию NHibernate и Fluent NHibernate. База данных - SQLite