NHibernate的;保存到数据库时,更新分离集合中实体的Id属性

时间:2011-02-02 19:38:04

标签: c# .net database nhibernate repository

我使用每次调用会话保存已分离的集合,可能添加/更新(因此包括一些临时对象)。但如何更新新实例的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();
                }
            }
        }

2 个答案:

答案 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?