private static bool MustCheck(Domain.IDomainModelClass cls) { var domainModelClassTypeFullName = cls.GetType().FullName; if (entityInfos.ContainsKey(domainModelClassTypeFullName) && !entityInfos[domainModelClassTypeFullName].IsVersioned) { return(false); } return(true); }
public static bool IsStale(Domain.IDomainModelClass domainModelClass, out string entityName, out object identifier) { var _entityName = ""; object _identifier = null; entityName = _entityName; identifier = _identifier; if (!MustCheck(domainModelClass)) { return(false); } try { bool isStale = false; #if NETFRAMEWORK var miniSessionManager = MiniSessionManager.InstanceSafe; #else var miniSessionManager = ServiceLocator.Current.GetInstance <IMiniSessionService>(); #endif var entityInfo = GetEntityInfo(miniSessionManager, domainModelClass); if (!entityInfo.IsVersioned) { return(false); } _entityName = entityInfo.EntityType.Name; var tableName = entityInfo.ClassMetaData.RootTableName; string _entityID = entityInfo.ClassMetaData.IdentifierPropertyName; _identifier = (domainModelClass.GetType().GetProperty(_entityID)).GetValue(domainModelClass, null); string currentTimestampString = (domainModelClass.GetType().GetProperty("VersionTimestamp")).GetValue(domainModelClass, null)?.ToString(); int currentTimestamp = 0; if (int.TryParse(currentTimestampString, out int cts)) { currentTimestamp = cts; } var sql = $"select 1 from {tableName} where {_entityID} = :idValue and VersionTimestamp > :currentTimestamp"; var sqlQuery = miniSessionManager.Session.CreateSQLQuery(sql).SetParameter("idValue", _identifier).SetParameter("currentTimestamp", currentTimestamp); isStale = sqlQuery.List().Count > 0; entityName = _entityName; identifier = _identifier; return(isStale); } catch (Exception e) { LogManager.GetLogger(typeof(StaleDataManager)).Error($"Error while examining Entity [{entityName}]", e); return(false); } }
private static EntityInfo GetEntityInfo(IMiniSessionService manager, Domain.IDomainModelClass domainModelClass) #endif { EntityInfo entityInfo; var domainModelClassType = domainModelClass.GetType(); if (entityInfos.ContainsKey(domainModelClassType.FullName)) { entityInfo = entityInfos[domainModelClassType.FullName]; } else { entityInfo = new EntityInfo(); entityInfo.EntityType = domainModelClass.GetType(); entityInfo.ClassMetaData = ((AbstractEntityPersister)manager.Session.SessionFactory.GetAllClassMetadata()[entityInfo.EntityType.FullName]); entityInfo.IsVersioned = entityInfo.ClassMetaData?.IsVersioned == true && entityInfo.ClassMetaData?.VersionType?.Name == "Int32"; entityInfo.DomainModelClass = domainModelClass; entityInfos.TryAdd(domainModelClassType.FullName, entityInfo); } return(entityInfo); }
private static EntityInfo GetEntityInfo(MiniSessionManager manager, Domain.IDomainModelClass domainModelClass)