DatabaseDependency Class
Definition
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
| Name | Description |
|---|---|
| DatabaseDependency(IEnumerable<Lazy<DatabaseWatcher>>, bool) | Initializes a new instance of the DatabaseDependency class. |
| DatabaseDependency(Lazy<DatabaseWatcher>, bool) | Initializes a new instance of the DatabaseDependency class. |