ServiceStack ORMLite Bug

时间:2013-11-17 15:14:38

标签: servicestack ormlite-servicestack

ServiceStack中是否有报告错误/请求功能的地方?

使用ServiceStack时,我的ServiceStack.ServiceInterface.Service对象抛出了这个错误: ExecuteReader需要一个开放且可用的连接。连接的当前状态已关闭。

Service类包含一个Db属性(在示例中使用),它是一个IDbConnection - 数据库连接不是线程安全的。

我很想知道为什么这种非线程安全的访问数据库的方法包含在Service类中。这对于处理多个Web服务请求没有好处。

1 个答案:

答案 0 :(得分:2)

Service.cs将尝试解析将为您创建新IDbConnection的IDbConnectionFactory,因此这里没有线程安全问题。

如果您想以不同方式处理它,可以覆盖它。

private IDbConnection db;
public virtual IDbConnection Db
{
    get { return db ?? (db = TryResolve<IDbConnectionFactory>().OpenDbConnection()); }
}

来源: https://github.com/ServiceStack/ServiceStack/blob/ada0f43012610dc9ee9ae863e77dfa36b7abea28/src/ServiceStack/Service.cs#L68

修改 也许不清楚OrmLiteConnectionFactories是否与 OpenDbConnection 调用一起自动创建一个新连接,但它们确实:

来源: https://github.com/ServiceStack/ServiceStack.OrmLite/blob/db40347532a14441eba32e575bcf07f3b2f45cef/src/ServiceStack.OrmLite/OrmLiteConnectionFactory.cs#L72