/// <summary> /// Validate the data in the specified entity framework context. /// </summary> public bool Validate(AppPrincipal contextPrincipal, AppContextBase appContext, T dataContext, IList <ErrorResult> errors) { bool result = true; if (this.CanValidateUsingDataAnnotations) { foreach (object entity in dataContext.GetChanges()) { var validatationContext = new ValidationContext(entity, serviceProvider: null, items: null); var volidationContextResults = new List <ValidationResult>(); result = Validator.TryValidateObject(entity, validatationContext, volidationContextResults, true); foreach (ValidationResult error in volidationContextResults) { errors.Add(new ErrorResult(ErrorResultKind.Validation, error.ErrorMessage)); } } } foreach (Validation validation in this.Validations) { foreach (object entity in dataContext.GetChanges(validation.Type)) { if (!validation.Validate(contextPrincipal, appContext, dataContext.Data, entity, errors)) { result = false; } } } return(result); }
/// <summary> /// Initializes the data context and creates the EF DbContext instance. /// </summary> public override void InitializeDataContext(AppContextBase appContext) { this.AppContext = appContext; bool?enableLazyLoading = this.AppContext.Options.ContainsKey("EF_EnableLazyLoading") ? (bool?)this.AppContext.Options["EF_EnableLazyLoading"] : null; bool?enableProxyCreation = this.AppContext.Options.ContainsKey("EF_EnableProxyCreation") ? (bool?)this.AppContext.Options["EF_EnableProxyCreation"] : null; IEntityDataValidator <EntityDataContext <TDbContext>, TDbContext> validator = this.AppContext.Options.ContainsKey("EF_EntityAppValidator") ? (IEntityDataValidator <EntityDataContext <TDbContext>, TDbContext>) this.AppContext.Options["EF_EntityAppValidator"] : DefaultValidator; this.Data = new TDbContext(); if (enableLazyLoading.HasValue) { this.Data.Configuration.LazyLoadingEnabled = enableLazyLoading.Value; } if (enableProxyCreation.HasValue) { this.Data.Configuration.ProxyCreationEnabled = enableProxyCreation.Value; } _validator = validator; IAppContextAware appContextAwareDataContext = this.Data as IAppContextAware; if (appContextAwareDataContext != null) { appContextAwareDataContext.InitializeFromAppContext(appContext); } }
/// <summary> /// Check changed entities and assert authorizations. /// </summary> public void AssertAuthorizations(AppPrincipal contextPrincipal, AppContextBase appContext, T dataContext) { foreach (Authorization authorization in this.Authorizations) { foreach (object entity in dataContext.GetChanges(authorization.Type)) { appContext.AssertAuthorization(authorization.Authorize(contextPrincipal, appContext, dataContext.Data, entity)); } } foreach (Type type in this.ReadOnlyTypes) { appContext.AssertAuthorization(!dataContext.GetChanges(type).Any()); } }
/// <summary> /// Audit changes in the specified entity framework context. /// </summary> public void Audit(AppPrincipal contextPrincipal, AppContextBase appContext, T dataContext) { try { ItemIdentifier userIdentifier = new ItemIdentifier(contextPrincipal.UserInfo.Id, contextPrincipal.UserInfo.Oid, contextPrincipal.UserInfo.UserName); appContext.AuditLogger.LogActions(AppAuditAction.Delete, 0, userIdentifier, this.AuditTypes, dataContext.GetLastDeleted(), null); appContext.AuditLogger.LogActions(AppAuditAction.Add, 0, userIdentifier, this.AuditTypes, dataContext.GetLastAdded(), null); appContext.AuditLogger.LogActions(AppAuditAction.Modify, 0, userIdentifier, this.AuditTypes, dataContext.GetLastModified(), null); } catch (Exception ex) { appContext.ErrorLogger.LogError(ex, "Could not complete logging of audit actions.", 0, 0, contextPrincipal.UserInfo.Id, contextPrincipal.UserInfo.Oid, contextPrincipal.UserInfo.UserName); throw; } }
public override Task <bool> Init(AppContextBase context) { context.Service.AddScoped <ITClass, TOneClass>(); return(base.Init(context)); }
public virtual Task <bool> Stop(AppContextBase context) { return(Task.FromResult(true)); }
/// <summary> /// Initializes the wcf service context and create proxy instance. /// </summary> public override void InitializeDataContext(AppContextBase appContext) { this.AppContext = appContext; this.Data = new TClient(); }