コード例 #1
0
        /// <summary>
        /// Integrate ActsAsVersioned with NHibernate.
        /// </summary>
        /// <param name="configuration">The NHibernate configuration.</param>
        /// <returns>The NHibernate configuration.</returns>
        /// <remarks>
        /// WARNING: Be sure to call this method after set all configuration properties, after have added all your mappings
        /// and after integrate NHibernate with all others packages as NHibernate.Validator, NHibernate.Search, NHibernate.Spatial.
        /// </remarks>
        public static Configuration IntegrateWithActsAsVersioned(this Configuration configuration)
        {
            const string integratedKey = "ActsAsVersioned_Integrated";

            if (configuration.GetProperty(integratedKey) != null)
            {
                Logger.Warn($"{nameof(IntegrateWithActsAsVersioned)} has already been called for this configuration");
                return(configuration);
            }

            var versionedClasses = new List <VersionedClass>();

            foreach (var pc in configuration.ClassMappings)
            {
                if (!VersionedClass.IsActsAsVersioned(pc))
                {
                    continue;
                }

                versionedClasses.Add(new VersionedClass(pc));
            }

            if (versionedClasses.Count == 0)
            {
                // nothing to do
                return(configuration);
            }

            var mapping = configuration.BuildMapping();

            foreach (var vc in versionedClasses)
            {
                vc.UpdateConfiguration(configuration, mapping);
            }

            var listeners = new[] { new VersionedEventListener(versionedClasses) };

            // ReSharper disable CoVariantArrayConversion
            configuration.AppendListeners(ListenerType.PostInsert, listeners);
            configuration.AppendListeners(ListenerType.PostUpdate, listeners);
            configuration.AppendListeners(ListenerType.PostDelete, listeners);
            // ReSharper restore CoVariantArrayConversion

            configuration.SetProperty(integratedKey, "1");
            return(configuration);
        }
コード例 #2
0
        // Only used for testing. Will be removed.
        public static IList <XDocument> Mappings(this Cfg.Configuration configuration)
        {
            var versionedClasses = new List <VersionedClass>();

            foreach (var pc in configuration.ClassMappings)
            {
                if (!VersionedClass.IsActsAsVersioned(pc))
                {
                    continue;
                }

                versionedClasses.Add(new VersionedClass(pc));
            }

            var documents = new List <XDocument>();
            var mapping   = configuration.BuildMapping();

            foreach (var vc in versionedClasses)
            {
                documents.Add(vc.BuildMappingDocument(configuration, mapping));
            }

            return(documents);
        }