我使用每次调用会话保存已分离的集合,可能添加/更新(因此包括一些临时对象)。但如何更新新实例的Id (瞬态),这是0,但现在(保存到数据库后)应该有一个值?
我的意思是;在数据库正确更新后,更新传递集合的Id。你会在存储库中这样做吗?如果是这样,怎么样? ..如果没有,怎么回事?
如果考虑到它的级联子集合也可能有新实例,那么它会有点复杂。非常感谢对此的一些想法/建议。
class StoreRepository
{
public static void SaveOrUpdate(List<Store> stores)
{
using (ISession session = FNH_Manager.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
foreach (var s in stores)
{
session.Get(typeof(Store), s.Id);
session.SaveOrUpdateCopy(s);
}
transaction.Commit();
}
}
}
答案 0 :(得分:0)
如果您确定未更改持久对象,则可以使用Lock
方法将其重新附加到新会话并进行修改。 Id = 0的新对象只是SaveOrUpdate
。
class StoreRepository
{
public static void SaveOrUpdate(List<Store> stores)
{
using (ISession session = FNH_Manager.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
if(s.Id == 0)
{
session.SaveOrUpdate(s);
}
transaction.Commit();
}
}
}
}
答案 1 :(得分:0)
未设置瞬态实例的Id似乎是由于使用 SaveOrUpdateCopy 。正如我在这里评论的那样。 NHibernate: How is identity Id updated when saving a transient instance?