【发布时间】:2017-03-30 04:57:31
【问题描述】:
我正在尝试使用 ReactiveX(更准确地说是 Rx.Net)和 SQLite.Net 构建数据访问层。
部分工作是创建一个返回数据库连接的可观察对象,以便仅在需要时才可以延迟打开它。到目前为止,这是我想出的:
var connection = Observable.Create<SQLiteConnection>(observer =>
{
Debug.WriteLine("CheckInStore: Opening database connection");
var database = new SQLiteConnection(configuration.ConnectionString.DatabasePath);
observer.OnNext(database);
observer.OnCompleted();
return Disposable.Create(() =>
{
Debug.WriteLine("CheckInStore: Closing database connection");
database.Close();
});
});
// Further down the line, a query would look like this:
var objects = connection.SelectMany(db => db.Query<>("select * from MyTable"));
不幸的是,每次有人订阅这个 observable 时,都会创建一个新的连接。一旦订阅被处理,它也会关闭。
我尝试使用.Replay(1).RefCount(),但它并没有改变任何东西。无论如何,我不确定是否理解整个 RefCount 的事情。
如何使这个数据库连接成为单例?
【问题讨论】:
标签: c# database system.reactive