Class DatabaseDependency
Provides a way to monitor any changes occurred to one or more relational data sources while notifying subscribing objects.
public class DatabaseDependency : Dependency, IDependency
- Inheritance
-
DatabaseDependency
- Implements
- Inherited Members
Examples
The following example demonstrates how to use Lazy<DatabaseWatcher> with a stub connection and a command that executes SELECT COUNT(*) FROM Products, then creates a DatabaseDependency with a change event handler that writes to the console. The dependency is started asynchronously, showing how to watch a relational data source for data-change notifications.
using System;
using System.Data;
using System.Threading.Tasks;
using Cuemon.Data;
using Cuemon.Runtime;
namespace MyApp.Examples;
public class DatabaseDependencyExample
{
public async Task DemonstrateAsync()
{
var lazyWatcher = new Lazy<DatabaseWatcher>(() =>
{
var connection = new StubConnection();
return new DatabaseWatcher(
connection,
conn =>
{
var command = conn.CreateCommand();
command.CommandText = "SELECT COUNT(*) FROM Products";
return command.ExecuteReader();
});
});
var dependency = new DatabaseDependency(lazyWatcher, breakTieOnChanged: true);
dependency.DependencyChanged += (sender, args) =>
{
Console.WriteLine("Database data has changed!");
};
await dependency.StartAsync();
}
private sealed class StubConnection : IDbConnection
{
public string ConnectionString { get; set; }
public int ConnectionTimeout => 30;
public string Database => "MyDb";
public ConnectionState State => ConnectionState.Closed;
public IDbTransaction BeginTransaction() => null;
public IDbTransaction BeginTransaction(IsolationLevel il) => null;
public void ChangeDatabase(string databaseName) { }
public void Close() { }
public IDbCommand CreateCommand() => new StubCommand();
public void Open() { }
public void Dispose() { }
}
private sealed class StubCommand : IDbCommand
{
public string CommandText { get; set; }
public int CommandTimeout { get; set; }
public CommandType CommandType { get; set; }
public IDbConnection Connection { get; set; }
public IDataParameterCollection Parameters => null;
public IDbTransaction Transaction { get; set; }
public UpdateRowSource UpdatedRowSource { get; set; }
public bool DesignTimeVisible { get; set; }
public void Cancel() { }
public IDbDataParameter CreateParameter() => null;
public int ExecuteNonQuery() => 0;
public IDataReader ExecuteReader() => null;
public IDataReader ExecuteReader(CommandBehavior behavior) => null;
public object ExecuteScalar() => 0;
public void Prepare() { }
public void Dispose() { }
}
}
Constructors
DatabaseDependency(IEnumerable<Lazy<DatabaseWatcher>>, bool)
Initializes a new instance of the DatabaseDependency class.
public DatabaseDependency(IEnumerable<Lazy<DatabaseWatcher>> lazyDatabaseWatchers, bool breakTieOnChanged = false)
Parameters
lazyDatabaseWatchersIEnumerable<Lazy<DatabaseWatcher>>The DatabaseWatcher sequence to associate with this dependency.
breakTieOnChangedboolif set to
trueall DatabaseWatcher instances is disassociated with this dependency after first notification of changed.
Remarks
The sequence of DatabaseWatcher initializations is deferred until StartAsync() is invoked.
DatabaseDependency(Lazy<DatabaseWatcher>, bool)
Initializes a new instance of the DatabaseDependency class.
public DatabaseDependency(Lazy<DatabaseWatcher> lazyDatabaseWatcher, bool breakTieOnChanged = false)
Parameters
lazyDatabaseWatcherLazy<DatabaseWatcher>The DatabaseWatcher to associate with this dependency.
breakTieOnChangedboolif set to
trueall DatabaseWatcher instances is disassociated with this dependency after first notification of changed.
Remarks
The DatabaseWatcher initialization is deferred until StartAsync() is invoked.
Exceptions
- ArgumentNullException
lazyDatabaseWatchercannot be null.