NHibernate не обновляет все свойства сущностей - PullRequest
1 голос
/ 08 августа 2011

У меня странная проблема с FluentNHibernate: когда я сохраняю свою сущность, одно из (справочных) свойств не обновляется. Другие свойства, как поля, так и ссылки, обновляются, и свойство с ошибками отображается правильно (извлечение сущностей работает как талисман).

(немного упрощенное) описание того, что я делаю:

  1. В моем методе действия MVC InputModel привязан и установлен. У него есть свойство для TypeID, где я хочу установить Type моей сущности (давайте назовем тип сущности Thing).
  2. Создается новый объект Thing, а простые свойства InputModel копируются. Для пары сложных свойств, среди которых свойство Type, которое не работает, и другое свойство, которое выполняется, выполняется следующее:
    2.1. Правильный ThingType выбирается из хранилища на основе предоставленного идентификатора типа.
    2.2. Тип устанавливается (используя thing.Type = theType) для нового объекта Thing.
  3. Thing, который я хочу обновить, извлекается из репозитория на основе идентификатора входной модели (не того же идентификатора, что и TypeID).
  4. Все свойства, сложные и прочие, копируются из новой вещи (созданной мной) в исходную (извлеченную из базы данных).
  5. Оригинал 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 - нет. Они отображаются одинаково, поэтому я не вижу, как это может быть ошибкой сопоставления.

1 Ответ

1 голос
/ 08 августа 2011

Вы должны указать <many-to-one .... cascade="save-update"/> для обновления ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...