3

鉴于文档中的以下 OrmLite 配置,为每个命名连接配置 ConnectionFilter 的最佳方法是什么?

var dbFactory = new OrmLiteConnectionFactory(
    "Data Source=host;Initial Catalog=RobotsMaster;Integrated Security=SSPI",  //Connection String
    SqlServerDialect.Provider);

dbFactory.Run(db => db.CreateTable<MasterRecord>(overwrite:false));

NoOfShards.Times(i => {
    var namedShard = "robots-shard" + i;
    dbFactory.RegisterConnection(namedShard, 
        "~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(),                //Connection String
        SqliteDialect.Provider);

    dbFactory.OpenDbConnection(namedShard).Run(db => db.CreateTable<Robot>(overwrite:false));
});

目前,我正在使用它而不是 RegisterConnection。

    OrmLiteConnectionFactory.NamedConnections[namedShard] = new OrmLiteConnectionFactory("~/App_Data/{0}.sqlite".Fmt(shardId).MapAbsolutePath(), true, SqliteDialect.Provider, true) {
        ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current)
    };

我们可以将 RegisterConnection 更改为类似

    public void RegisterConnection(string connectionKey, string connectionString, IOrmLiteDialectProvider dialectProvider, bool autoDisposeConnection = true)
    {
        RegisterConnection(connectionKey, new OrmLiteConnectionFactory(connectionString, autoDisposeConnection, dialectProvider, autoDisposeConnection));
    }

    public void RegisterConnection(string connectionKey, OrmLiteConnectionFactory ormLiteConnectionFactory)
    {
        NamedConnections[connectionKey] = ormLiteConnectionFactory;
    }
4

1 回答 1

3

向 ServiceStack.OrmLite 提交了一个补丁。https://github.com/ServiceStack/ServiceStack.OrmLite/pull/212

于 2013-03-28T16:55:52.017 回答