我一直在尝试让sqlcacheDependency工作。我认为所有的设置都是正确的,但是当我更新表时,缓存中的项不会失效。
你能看看我的代码,看看我是否遗漏了什么吗?
我为沙盒数据库启用了ServiceBroker。
我在global.asax文件中放置了以下代码。我还重新启动IIS以确保它被调用。
void Application_Start(object sender, EventArgs e) {
SqlDependency.Start(ConfigurationManager.ConnectionStrings["SandboxConnectionString"].ConnectionString);
}
我已将此条目放入web.config文件:
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="10000">
<databases>
<add name="Sandbox" connectionStringName="SandboxConnectionString"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
我调用此代码将项目放入缓存:
protected void CacheDataSetButton_Click(object sender, EventArgs e) {
using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["SandboxConnectionString"].ConnectionString)) {
using (SqlCommand sqlCommand = new SqlCommand("SELECT PetID, Name, Breed, Age, Sex, Fixed, Microchipped FROM dbo.Pets", sqlConnection)) {
using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand)) {
DataSet petsDataSet = new DataSet();
sqlDataAdapter.Fill(petsDataSet, "Pets");
SqlCacheDependency petsSqlCacheDependency = new SqlCacheDependency(sqlCommand);
Cache.Insert("Pets", petsDataSet, petsSqlCacheDependency, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration);
}
}
}
}
然后我用以下代码绑定GridView:
protected void BindGridViewButton_Click(object sender, EventArgs e) {
if (Cache["Pets"] != null) {
GridView1.DataSource = Cache["Pets"] as DataSet;
GridView1.DataBind();
}
}
在尝试对GridView进行数据绑定期间,我更改了表的值,希望它使缓存[“pets”]项无效,但它似乎无限期地留在缓存中。