public
bool
IsAzureDb
{
get
if
(
string
.IsNullOrEmpty(_version))
_version = Database.SqlQuery<
>(
"select SERVERPROPERTY ('Edition')"
).Single();
}
switch
(_version)
case
"SQL Azure"
:
return
true
;
default
false
/// <summary>
/// used for detecting changes related to specific conditions
/// </summary>
interface
IRepositoryListener
void
StartListener();
StopListener();
Register(
query, Action callback);
query;
using
(var context =
new
PieShopContext())
(context.IsAzureDb)
_listener =
PollingListener();
query =
"select top 1 [InventoryEntryId] from [ledger].[InventoryEntries] order by 1 desc"
else
DependencyListener();
"select [InventoryEntryId] from [ledger].[InventoryEntries]"
_listener.StartListener();
_listener.Register(query, InventoryRepository.Instance.RefreshInventory);
StartListener()
_poller = Task.Run(() =>
while
(!_token.IsCancellationRequested)
(!
.IsNullOrEmpty(_query) && _callback !=
null
)
var result = context.Database.SqlQuery<
int
>(_query).Single();
(result != _currentValue)
_currentValue = result;
_callback();
Thread.Sleep(_frequency);
, _token);
GetData()
(var connection =
SqlConnection(_connectionString))
connection.Open();
// simple queries work best - take a look at what is not supported
// https://msdn.microsoft.com/library/ms181122.aspx?f=255&MSPPError=-2147217396
(SqlCommand command =
SqlCommand(_query, connection))
// Make sure the command object does not already have
// a notification object associated with it.
command.Notification =
SqlDependency dependency =
SqlDependency(command);
dependency.OnChange +=
OnChangeEventHandler(dependency_OnChange);
(connection.State == ConnectionState.Closed)
(var reader = command.ExecuteReader())
reader.Cast<IDataRecord>().Last().GetInt32(0);
SqlDependency.Start(_connectionString);
StopListener()
SqlDependency.Stop(_connectionString);