public override void GetTasks(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();
            var q = session.Query <DemoTask>().Where(TasksFilterPredicate(currentUser)).Take(recordsCount);

            foreach (var t in q)
            {
            }
            CheckCollectionCount(q, recordsCount);
        }
        public override void UpdateTasks(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            foreach (var task in dataContext.Tasks.Where(TasksFilterPredicate(currentUser)).Take(recordsCount))
            {
                task.DueDate = DateTime.Now.AddHours(24).Date;
            }
            dataContext.SaveChanges();
        }
        public override void UpdateContacts(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            foreach (var contact in dataContext.Contacts.Where(ContactsFilterPredicate(currentUser)).Take(recordsCount))
            {
                contact.Anniversary = DateTime.Now;
            }
            dataContext.SaveChanges();
        }
        public override void GetTasks(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();
            var q = dataContext.Tasks.AsNoTracking().Where(TasksFilterPredicate(currentUser)).Take(recordsCount);

            foreach (var t in q)
            {
            }
            CheckCollectionCount(q, recordsCount);
        }
        public override void InsertContact(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            for (int i = 1; i < recordsCount + 1; i++)
            {
                var contact = new Contact(session);
                objectHelper.FillContact(contact, currentUser.Department, i);
            }
            session.CommitChanges();
        }
        public override void InsertContact(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            for (int i = 1; i < recordsCount + 1; i++)
            {
                var contact = securedObjectSpace.CreateObject <ContactType>();
                securedObjectHelper.FillContact(contact, currentUser.Department, i);
            }
            securedObjectSpace.CommitChanges();
        }
        public override void GetContacts(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            CheckUserData(currentUser);
            var q = session.Query <Contact>().Where(ContactsFilterPredicate(currentUser)).Take(recordsCount);

            foreach (var t in q)
            {
            }
            CheckCollectionCount(q, recordsCount);
        }
        public override void InsertEmptyContact(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            for (int i = 1; i < recordsCount + 1; i++)
            {
                var contact = securedObjectSpace.CreateObject <ContactType>();
                contact.SetDepartment(currentUser.Department);
                contact.FirstName = $"Contact{i}";
            }
            securedObjectSpace.CommitChanges();
        }
        protected override IDBUpdater DBUpdater => XpoDBUpdater.Instance;//new XpoDBUpdater(KeyPropertyName);

        public override void InsertEmptyContact(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            for (int i = 1; i < recordsCount + 1; i++)
            {
                var contact = new Contact(session)
                {
                    FirstName = $"Contact{i}"
                };
                ((IContact)contact).SetDepartment(currentUser.Department);
            }
            session.CommitChanges();
        }
 protected void CheckUserData(ICustomPermissionPolicyUser defaultUser)
 {
     if (CheckResult_ForDebug)
     {
         if (defaultUser == null)
         {
             throw new InvalidOperationException($"The user is not created. The DBUpdater should populate data");
         }
         if (defaultUser.Department == null)
         {
             throw new InvalidOperationException($"The user department is not created. The DBUpdater should populate data");
         }
     }
 }
        public override void InsertContact(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();
            var objectHelper = new EFCoreObjectHelper(() => dataContext);

            objectHelper.BeginTransaction();
            for (int i = 0; i < recordsCount; i++)
            {
                var contact = new Contact();
                objectHelper.FillContact(contact, currentUser.Department, i);
                dataContext.Contacts.Add(contact);
            }
            dataContext.SaveChanges();
        }
        protected override IDBUpdater DBUpdater => EFCoreDBUpdater.Instance;//new EFCoreDBUpdater(KeyPropertyName);

        public override void InsertEmptyContact(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            for (int i = 0; i < recordsCount; i++)
            {
                var contact = new Contact()
                {
                    FirstName = $"Contact{i}"
                };
                ((IContact)contact).SetDepartment(currentUser.Department);
                dataContext.Contacts.Add(contact);
            }
            dataContext.SaveChanges();
        }
        public override void UpdateTasks(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            session.ExplicitBeginTransaction();
            try {
                foreach (var task in session.Query <DemoTask>().Where(TasksFilterPredicate(currentUser)).Take(recordsCount))
                {
                    task.DueDate = DateTime.Now.AddHours(24).Date;
                }
                session.CommitChanges();
            }
            finally {
                session.ExplicitCommitTransaction();
            }
        }
        public override void UpdateContacts(int recordsCount)
        {
            ICustomPermissionPolicyUser currentUser = GetUser();

            session.ExplicitBeginTransaction();
            try {
                foreach (var contact in session.Query <Contact>().Where(ContactsFilterPredicate(currentUser)).Take(recordsCount))
                {
                    contact.Anniversary = DateTime.Now;
                }
                session.CommitChanges();
            }
            finally {
                session.ExplicitCommitTransaction();
            }
        }
 Expression <Func <DemoTask, bool> > TasksFilterPredicate(ICustomPermissionPolicyUser currentUser) =>
 task => task.Contacts.Any(contact => contact.Department.Users.Any(user => user == currentUser)) || ((Contact)task.AssignedTo).Department == currentUser.Department;
 Expression <Func <Contact, bool> > ContactsFilterPredicate(ICustomPermissionPolicyUser currentUser) =>
 contact => contact.Department == currentUser.Department;