コード例 #1
0
 private IDictionary <string, object> originalId(PersistentCollectionChangeData persistentCollectionChangeData)
 {
     return((IDictionary <string, object>)persistentCollectionChangeData.Data[VerCfg.AuditEntCfg.OriginalIdPropName]);
 }
コード例 #2
0
        public void PerformCollectionChange(ISession session, string entityName, string propertyName, AuditConfiguration auditCfg, PersistentCollectionChangeData persistentCollectionChangeData, object revision)
        {
            var qb = new QueryBuilder(persistentCollectionChangeData.EntityName, QueryConstants.MiddleEntityAlias);

            var originalIdPropName   = _auditConfiguration.AuditEntCfg.OriginalIdPropName;
            var originalId           = (IDictionary)persistentCollectionChangeData.Data[originalIdPropName];
            var revisionFieldName    = auditCfg.AuditEntCfg.RevisionFieldName;
            var revisionTypePropName = auditCfg.AuditEntCfg.RevisionTypePropName;

            // Adding a parameter for each id component, except the rev number and type.
            foreach (DictionaryEntry originalIdKeyValue in originalId)
            {
                if (!revisionFieldName.Equals(originalIdKeyValue.Key) && !revisionTypePropName.Equals(originalIdKeyValue.Key))
                {
                    qb.RootParameters.AddWhereWithParam(originalIdPropName + "." + originalIdKeyValue.Key, true, "=", originalIdKeyValue.Value);
                }
            }

            var sessionFactory = ((ISessionImplementor)session).Factory;
            var propertyType   = sessionFactory.GetEntityPersister(entityName).GetPropertyType(propertyName);

            if (propertyType.IsCollectionType)
            {
                var collectionPropertyType = (CollectionType)propertyType;
                // Handling collection of components.
                if (collectionPropertyType.GetElementType(sessionFactory) is ComponentType)
                {
                    // Adding restrictions to compare data outside of primary key.
                    // todo: is it necessary that non-primary key attributes be compared?
                    foreach (var dataEntry in persistentCollectionChangeData.Data)
                    {
                        if (!originalIdPropName.Equals(dataEntry.Key))
                        {
                            if (dataEntry.Value != null)
                            {
                                qb.RootParameters.AddWhereWithParam(dataEntry.Key, true, "=", dataEntry.Value);
                            }
                            else
                            {
                                qb.RootParameters.AddNullRestriction(dataEntry.Key, true);
                            }
                        }
                    }
                }
            }

            addEndRevisionNullRestriction(_auditConfiguration, qb);

            var l = qb.ToQuery(session).SetLockMode(QueryConstants.MiddleEntityAlias, LockMode.Upgrade).List();

            if (l.Count > 0)
            {
                updateLastRevision(session, _auditConfiguration, l, originalId, persistentCollectionChangeData.EntityName, revision, true);
            }

            // Save the audit data
            var data = persistentCollectionChangeData.Data;

            session.Save(persistentCollectionChangeData.EntityName, data);
            SessionCacheCleaner.ScheduleAuditDataRemoval(session, data);
        }
コード例 #3
0
        public void PerformCollectionChange(ISession session, string entityName, string propertyName, AuditConfiguration auditCfg, PersistentCollectionChangeData persistentCollectionChangeData, object revision)
        {
            var data = persistentCollectionChangeData.Data;

            session.Save(persistentCollectionChangeData.EntityName, data);
            SessionCacheCleaner.ScheduleAuditDataRemoval(session, data);
        }
コード例 #4
0
 private Object getOriginalId(PersistentCollectionChangeData persistentCollectionChangeData)
 {
     return(persistentCollectionChangeData.getData()[verCfg.AuditEntCfg.OriginalIdPropName]);
 }