试图用“ 结构图” 设置 Dapper 来使用“ 每一个请求” 的情景类型 。 在我 Global. asax 中, 我有以下功能( 从一个旧的“ Ayende s” 文章中修改, 涉及 Nhebertnate, 一个我发现在“ 结构图” 中正在讨论 < code> BuildUp () 方法 ):
protected static IDbConnection CreateConnection() {
var settings = ConfigurationManager.ConnectionStrings["MyConnectionString"];
var connection = DbProviderFactories.GetFactory(settings.ProviderName).CreateConnection();
if (connection == null) {
throw new ArgumentNullException("connection");
}
connection.ConnectionString = settings.ConnectionString;
return connection;
}
public static IDbConnection CurrentConnection {
get { return (IDbConnection)HttpContext.Current.Items["current.connection"]; }
set { HttpContext.Current.Items["current.connection"] = value; }
}
public Global() {
BeginRequest += (sender, args) => {
CurrentConnection = CreateConnection();
CurrentConnection.Open();
};
EndRequest += (sender, args) => {
if (CurrentConnection == null) return;
CurrentConnection.Close();
CurrentConnection.Dispose();
}
}
void Application_Start(object sender, EventArgs e) {
ObjectFactory.Initialize(x => {
x.For<IDbConnection>().Singleton().Use(CreateConnection());
x.For<ICustomerRepository>().Use<CustomerRepository>();
x.SetAllProperties(y => y.OfType<ICustomerRepository>());
});
}
// BasePage.cs
public class BasePage : System.Web.UI.Page {
public IDbConnection CurrentConnection { get; set; }
public BasePage() {
ObjectFactory.BuildUp(this);
}
}
每次我试着调用这个时, 实际的查询都会失败, 错误显示连接当前状态已关闭, 虽然在“ 开始请求” 处理器上有一个断点显示正在调用 Open () 连接 。
如果我手动打给Open 并关闭每个存储器方法中的 IDB连接,这似乎有效, 但我尽量避免这样做,如果可能的话。