У меня проблема с сохранением сопоставленного объекта 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 - он не будет сохранять коллекцию должным образом при обновлении.
Элемент списка Если я создаю новый объект и помещаю вещи в коллекцию, он сохранится нормально.
Если я отредактирую объект и добавлю новыйвещи в коллекции, новые вещи будут сохранены в порядке.
Если я отредактирую объект, элементы, уже находящиеся в коллекции БУДУТ УДАЛЕНЫ .Почему?
Спасибо за вашу поддержку в этом, я действительно ценю это.
Редактировать: код, который сохраняет:
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;
}