我在IContainer Initialize例程中配置了以下内容:
x.For<IDbConnection>().Use<SqlConnection>().Ctor<string>().Is(MY_SQL_CONNECTION_STRING);
这是我服务的构造函数:
private readonly IForumRepository _repo;
public ForumService(IForumRepository repo)
{
_repo = repo;
}
这是我的存储库的构造函数:
private readonly IDbConnection _cn;
public ForumRepository(IDbConnection connection)
{
_cn = connection;
}
在我的一个服务例程中,我正在调用一个方法来获取我的存储库中的对象,然后在返回服务层时,我在我的存储库中调用第二个方法 - 但是,在第二次调用存储库时,我的connection(_cn)不再有与之关联的连接字符串(当我的服务第一次在存储库中调用方法时,它似乎在退出using {}块时被擦除。
这是我在存储库中调用的第一个方法。
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依赖项仍应保留原始连接字符串的详细信息。
有人可以说明我出错的地方吗?
答案 0 :(得分:2)
using
块完成后,将处理正在使用的对象。处理时连接字符串是否被删除?在任何情况下,您都可能不应该在处置完毕后使用该对象。
根据你帖子中的代码,我认为你不想使用using
块?我想你会想要手动关闭连接(我认为using
将自动执行此操作作为处理的一部分)。