我在保存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;
}