/// <summary> /// Gets the custom value for a Property that is decorated with a derived attribute /// </summary> /// <param name="originalObject">the original object that is applied to a viewmodel</param> /// <param name="requestInstance"></param> /// <returns>the value to assign to the target-property on a viewmodel</returns> protected override object GetCustomValueFor(object originalObject, Func <Type, object> requestInstance) { var dbContext = ContextHelper.GetDbContextFromEntity(originalObject); if (dbContext == null) { dbContext = (DbContext)requestInstance(typeof(DbContext)); } if (dbContext != null) { var src = originalObject; if (DeciderMode != DeciderMode.This) { src = ExpressionParser.Parse(PropertyName, originalObject); } var deciderName = DeciderName; int deciderId = -1; Type entityType = typeof(object); string table = null, schema = null; if (string.IsNullOrEmpty(deciderName) && src != null) { table = dbContext.GetTableName(src.GetType(), out entityType, out schema); string fqName = $"[{schema}].[{table}]"; var td = dbContext.Set <TableDecider>().FirstOrDefault(n => n.TableName == fqName); deciderId = td?.DeciderId ?? -1; } else { deciderId = dbContext.Set <Decider>().FirstOrDefault(n => n.DisplayName == deciderName)?.DeciderId ?? -1; } if (deciderId != -1) { IConstraintFactory factory = RepoConstraintsInitializer.GetFactory(dbContext); var deciderRecord = dbContext.Set <Decider>().First(n => n.DeciderId == deciderId); var decider = GetSimpleDecider(deciderRecord, entityType, factory, table, schema, (s, t) => { return(null); }); DeciderResult retVal = new DeciderResult(); retVal.Result = decider.Decide(src, DecisionMethod.Full, out var msg); retVal.Messages = msg; return(retVal); } if (src == null) { return(new DeciderResult { Messages = EntityNullMessage, Result = EntityNullResult }); } LogEnvironment.LogDebugEvent(null, "No capable decider was found.", (int)LogSeverity.Warning, null); return(null); } LogEnvironment.LogDebugEvent(null, "Unable to resolve the DbContext for provided model.", (int)LogSeverity.Warning, null); return(null); }
/// <summary> /// Refreshes the constraints that are registered in this Factory /// </summary> private void RefreshConstraints() { DbContext repo; using (contextProvider.AcquireContext(out repo)) { RepoConstraintsInitializer.InitializeConstraints(this, this.Factory, repo); } }