首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDbConnection和StructureMap的问题

IDbConnection和StructureMap的问题
EN

Stack Overflow用户
提问于 2011-08-02 03:10:06
回答 1查看 529关注 0票数 0

我在IContainer初始化例程中配置了以下内容:

代码语言:javascript
复制
x.For<IDbConnection>().Use<SqlConnection>().Ctor<string>().Is(MY_SQL_CONNECTION_STRING);

下面是我的服务的构造函数:

代码语言:javascript
复制
private readonly IForumRepository _repo;
public ForumService(IForumRepository repo)
{
    _repo = repo;
}

下面是我的存储库的构造函数:

代码语言:javascript
复制
private readonly IDbConnection _cn;
public ForumRepository(IDbConnection connection)
{
    _cn = connection;
}

在我的一个服务例程中,我调用了一个方法来获取存储库中的对象,然后在返回到服务层时,我调用了存储库中的第二个方法-然而,在第二次调用存储库时,我的连接(_cn)不再有与其关联的连接字符串(当我的服务第一次调用存储库中的方法时,它似乎在退出using {}块时被擦除)。

下面是我在存储库中调用的第一个方法。

代码语言:javascript
复制
public Tag GetTag(int id)
{
    Tag o;
    const string q = @"select * from tags where id = @pId";

    using (_cn)
    {
        _cn.Open();
        o = _cn.Query<Tag>(q, new { pId = id }).SingleOrDefault();
    } *** AT THIS POINT THE CONN STRING PROPERTY OF _CN IS CLEARED?!

    return o;
}

我认为这应该可以很好地工作,因为我的服务的构造函数实例化了一个SQL连接,对repo的第一次调用可以很好地利用它,而且由于对我的repo的后续调用都在相同的服务范围内,我认为存储库的SqlConnection依赖项应该仍然保留原始连接字符串的细节。

有没有人能解释一下我哪里出了问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-02 04:15:42

using块完成之后,正在使用的对象将被释放。在处理时连接字符串会被移除吗?在任何情况下,在is被释放之后,您都不应该使用该对象。

根据您帖子中的代码,我认为您不想使用using块?我认为您可能希望手动关闭连接(我认为using将自动关闭连接作为处理的一部分)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6903134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档