public void WhenBrokerIsNotRunningExceptionIsThrown()
        {
            using (var context = CreateContext())
            using (var invalidator = new SqlDependencyInvalidator())
            {
                context.SqlConnection.Open();

                var disableCommand = new SqlCommand(@"ALTER DATABASE [" + TestDatabase.Name + "] SET DISABLE_BROKER WITH ROLLBACK IMMEDIATE", context.SqlConnection);
                disableCommand.ExecuteNonQuery();

                var exceptionWasThrown = false;
                try
                {
                    Assert.AreEqual(0, context.GetTable1().AsCached(invalidator).Count());
                }
                catch (LinqCacheException exception)
                {
                    exceptionWasThrown = true;
                    Assert.AreEqual("The SQL Server Service Broker for the current database is not enabled.", exception.Message);
                }

                Assert.IsTrue(exceptionWasThrown);

                var enableCommand = new SqlCommand(@"ALTER DATABASE [" + TestDatabase.Name + "] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE", context.SqlConnection);
                enableCommand.ExecuteNonQuery();
            }
        }
        public void WhenUnderlyingDataIsChangedCacheIsRefreshed()
        {
            using (var context = CreateContext())
            using (var invalidator = new SqlDependencyInvalidator())
            {
                Assert.AreEqual(0, context.GetTable1().AsCached(invalidator).ToList().Count);

                context.AddIntoTable1(1, "Data");
                context.SaveChanges();

                invalidator.OnChangeReceived.WaitOne();

                Assert.AreEqual(1, context.GetTable1().AsCached(invalidator).ToList().Count);
            }
        }
        public void WhenUnsupportedQueryIsExecutedUnsupportedQueryEventIsFired()
        {
            using (var context = CreateContext())
            using (var invalidator = new SqlDependencyInvalidator())
            {
                bool unsupportedQueryFired = false;
                invalidator.UnsupportedQuery += (sender, queryable) =>
                {
                    unsupportedQueryFired = true;
                };

                context.GetTable1().GroupBy(row => row).Select(group => group).AsCached(invalidator).ToList();

                invalidator.OnChangeReceived.WaitOne();

                Assert.IsTrue(unsupportedQueryFired);
            }
        }