У меня странная проблема с FluentNHibernate: когда я сохраняю свою сущность, одно из (справочных) свойств не обновляется. Другие свойства, как поля, так и ссылки, обновляются, и свойство с ошибками отображается правильно (извлечение сущностей работает как талисман).
(немного упрощенное) описание того, что я делаю:
- В моем методе действия MVC
InputModel
привязан и установлен. У него есть свойство для TypeID
, где я хочу установить Type
моей сущности (давайте назовем тип сущности Thing
).
- Создается новый объект
Thing
, а простые свойства InputModel
копируются. Для пары сложных свойств, среди которых свойство Type
, которое не работает, и другое свойство, которое выполняется, выполняется следующее:
2.1. Правильный ThingType
выбирается из хранилища на основе предоставленного идентификатора типа.
2.2. Тип устанавливается (используя thing.Type = theType
) для нового объекта Thing
.
-
Thing
, который я хочу обновить, извлекается из репозитория на основе идентификатора входной модели (не того же идентификатора, что и TypeID
).
- Все свойства, сложные и прочие, копируются из новой вещи (созданной мной) в исходную (извлеченную из базы данных).
- Оригинал
Thing
сохраняется с использованием session.Save();
.
Как указано выше, не работает только одно свойство - работают другие свойства, следуя (насколько я могу судить) точно такой же схеме. Я также отладил и проверил, что исходный Thing
имеет правильный, обновленный Type
, когда он передается session.Save()
.
Понятия не имею, с чего начать устранение неполадок ...
Обновление : классы - простые POCO:
public class Thing
{
public int ID { get; set; }
public string SomeSimpleProp { get; set; }
public ThingType Type { get; set; }
public OtherEntity OtherReference { get; set; }
}
public class ThingType
{
public int ID { get; set; }
public string Name { get; set; }
}
Мои точные сопоставления (кроме имен типов и свойств) таковы:
// In ThingMap : ClassMap<Thing> constructor:
Id(t => t.ID).Column("ThingID");
Map(t => t.SomeSimpleProp);
References(t => t.Type).Column("ThingTypeID");
References(t => t.OtherReference).Column("OtherReferenceID");
// In ThingTypeMap : ClassMap<ThingType> constructor:
Id(t => t.ID).Column("ThingTypeID");
Map(t => t.Name);
Как я уже сказал, OtherReference
обновляется правильно, а Type
- нет. Они отображаются одинаково, поэтому я не вижу, как это может быть ошибкой сопоставления.