Почему коллекция компонентов NHibernate стирается при родительском обновлении? - PullRequest
0 голосов
/ 31 января 2012

У меня проблема с сохранением сопоставленного объекта nhibernate - он не сохраняет свою коллекцию при обновлении должным образом, он удаляет текущие значения.Вставка работает нормально.

Итак, у меня есть объект с коллекцией:

public class ObjectClass
{
    public virtual Iesi.Collections.Generic.ISet<ActionWithValue> ActionsWithValue { get; set; 
}

, а сама коллекция:

public class ActionWithValue
{
    public ActionClass Action { get; set; }
    public decimal Value { get; set; }

    public override bool Equals(object obj)
    {
        return this.Equals(obj as ActionWithValue);
    }

    public virtual bool Equals(PostupakOporabeSaKolicinom other)
    {
        if (other == null)
        {
            return false;
        }
        return this.Action == other.Action && this.Value == other.Value;
    }

    public override int GetHashCode()
    {
        int actionId = (int)Action; // its an enum...
        return (actionId.ToString() + "-" + Value.ToString()).GetHashCode();
    }
}

Поэтому моя работа заключалась в создании ActionWithValueколлекция компонентов в NHibernate должна была быть простой:

  <set name="ActionWithValue" table="ActionWithValues" cascade="all-delete-orphan" >
    <key>
      <column name="Id1"/>
      <column name="Id2" />
    </key>
    <composite-element class="MyWebApp.ActionWithValue, MyWebApp">
      <property name="Action" column="Action" type="NHibernate.Type.EnumStringType`1[[MyWebApp.Action, MyWebApp]]" />
      <property name="Value"/>
    </composite-element>
  </set>

И у меня проблема с сохранением объекта ObjectClass - он не будет сохранять коллекцию должным образом при обновлении.

  1. Элемент списка Если я создаю новый объект и помещаю вещи в коллекцию, он сохранится нормально.

  2. Если я отредактирую объект и добавлю новыйвещи в коллекции, новые вещи будут сохранены в порядке.

  3. Если я отредактирую объект, элементы, уже находящиеся в коллекции БУДУТ УДАЛЕНЫ .Почему?

Спасибо за вашу поддержку в этом, я действительно ценю это.

Редактировать: код, который сохраняет:

var success = objectClassRepository.Save(objectInstance);

public virtual bool Save(T entity)
{
    var session = SessionProvider.GetRequestSession(this.DatabaseName);
    using (var transaction = session.BeginTransaction())
    {
        try
        {
            session.SaveOrUpdate(entity);
            transaction.Commit();
        }
        catch (Exception ex)
        {
            if (transaction.IsActive)
            {
                transaction.Rollback();            
            }
            session.Close();
            return false;
        }
    }

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