/// <summary>
 /// From NHibernate documentation:
 /// Persist all reachable transient objects, reusing the current identifier
 /// values. Note that this will not trigger the Interceptor of the Session.
 /// </summary>
 /// <param name="instance">The instance.</param>
 /// <param name="replicationMode">The replication mode.</param>
 public static void Replicate(object instance, ReplicationMode replicationMode)
 {
     ActiveRecordBase.Replicate(instance, replicationMode);
 }
示例#2
0
        /// <summary>
        /// From NHibernate documentation: 
        /// Persist all reachable transient objects, reusing the current identifier 
        /// values. Note that this will not trigger the Interceptor of the Session.
        /// </summary>
        /// <param name="instance">The instance.</param>
        /// <param name="replicationMode">The replication mode.</param>
        protected internal static void Replicate(object instance, ReplicationMode replicationMode)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }

            EnsureInitialized(instance.GetType());

            ISession session = holder.CreateSession(instance.GetType());

            try
            {
                session.Replicate(instance, replicationMode);
            }
            catch(Exception ex)
            {
                holder.FailSession(session);

                // NHibernate catches our ValidationException, and as such it is the innerexception here
                if (ex.InnerException is ValidationException)
                {
                    throw ex.InnerException;
                }
                else
                {
                    throw new ActiveRecordException("Could not perform Replicate for " + instance.GetType().Name, ex);
                }
            }
            finally
            {
                holder.ReleaseSession(session);
            }
        }