Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class AuthorizedDbContext : DbContext
- {
- //...
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- var constraintOptions = this._authorizationOptions.ConstraintOptions;
- constraintOptions.ApplyStaticConstraint(modelBuilder, this);
- base.OnModelCreating(modelBuilder);
- }
- public async override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
- {
- this.VerifyResourceAccess();
- return await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
- }
- protected void VerifyResourceAccess()
- {
- if (false == ChangeTracker.HasChanges())
- {
- return;
- }
- //WARNING: if you don't set the change tracking behavior to no tracking, you could reload entities by accident
- var previousTrackingBehavior = this.ChangeTracker.QueryTrackingBehavior;
- this.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
- this._authorizationOptions.ContextValidator.ValidateAndThrow(this);
- this.ChangeTracker.QueryTrackingBehavior = previousTrackingBehavior;
- }
- }
- //Pseudo-Code
- AuthorizedDbContextScope<T>: IDisposable
- where T: DbContext
- {
- public void ApplyConstraints()
- {
- this._options.DynamicConstraints.Foreach(EntityFrameWorkZ.ApplyDynamicFilterFromAction)
- }
- }
Add Comment
Please, Sign In to add comment