asp.net中的SqlDependency
发布时间:2020-05-24 07:59:22 所属栏目:asp.Net 来源:互联网
导读:我正在使用SqlDependency来控制我的缓存.我想用它来监控几个表(大约10个).每个观看的表应该有一个SqlDependency. 我应该为每个代码创建这样的代码: public void CreateDependency_Table() { if (connectionStringSettings != null) { us
|
我正在使用SqlDependency来控制我的缓存.我想用它来监控几个表(大约10个).每个观看的表应该有一个SqlDependency. 我应该为每个代码创建这样的代码: public void CreateDependency_Table()
{
if (connectionStringSettings != null)
{
using (SqlConnection conn = new SqlConnection(connectionStringSettings.ConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT id from dbo.Table",conn))
{
cmd.Notification = null;
SqlDependency sqlDependency = new SqlDependency(cmd);
sqlDependency.OnChange += new OnChangeEventHandler(sqlDep_Table_OnChange);
using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
}
}
}
}
}
和: private void sqlDep_Table_OnChange(object sender,SqlNotificationEventArgs e)
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= sqlDep_Table_OnChange;
MyCacheWhatever.Clear();
//Re-attach dependency
CreateDependency_Table();
}
或者我可以在它们之间重复使用它喜欢连接? 这是设置多个通知的首选方式吗? 解决方法在这里,我将向您展示一个可以帮助您的linq扩展:public static class LinqExtensions
{
private static ILog _Log = LogManager.GetLogger(MethodInfo.GetCurrentMethod().DeclaringType);
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design","CA1031:DoNotCatchGeneralExceptionTypes")]
public static IList<T> LinqCache<T>(this Table<T> query) where T : class
{
string tableName = query.Context.Mapping.GetTable(typeof(T)).TableName;
IList<T> result = HttpContext.Current.Cache[tableName] as List<T>;
if (result == null)
{
try
{
using (SqlConnection cn = new SqlConnection(query.Context.Connection.ConnectionString))
{
cn.Open();
SqlCommand cmd = new SqlCommand(query.Context.GetCommand(query).CommandText,cn);
cmd.Notification = null;
cmd.NotificationAutoEnlist = true;
_Log.DebugFormat("Attempting to enable sql cache dependency notifications for table {0}",tableName);
SqlCacheDependencyAdmin.EnableNotifications(query.Context.Connection.ConnectionString);
string[] tables = SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(query.Context.Connection.ConnectionString);
if (!tables.Contains(tableName))
SqlCacheDependencyAdmin.EnableTableForNotifications(query.Context.Connection.ConnectionString,tableName);
_Log.DebugFormat("Sql cache dependency notifications for table {0} is enabled.",tableName);
SqlCacheDependency dependency = new SqlCacheDependency(cmd);
cmd.ExecuteNonQuery();
result = query.ToList();
HttpContext.Current.Cache.Insert(tableName,result,dependency);
_Log.DebugFormat("Table {0} is cached.",tableName);
}
}
catch (Exception ex)
{
result = query.Context.GetTable<T>().ToList();
HttpContext.Current.Cache.Insert(tableName,result);
string msg = string.Format(CultureInfo.InvariantCulture,"Table {0} is cached without SqlCacheDependency!!!",tableName);
_Log.Warn(msg,ex);
}
}
return result;
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET成员提供程序 – 单一登录
- asp.net-mvc – 在EF 6中设置命令超时
- asp.net-mvc-3 – 任何好的样品开始使用Dapper?
- asp.net-web-api – 将Application Insight与ASP API Core结
- ASP.NET 5未在开发模式下运行
- Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印
- asp.net-mvc – 类型或命名空间名称“Mvc”不存在
- asp.net – 为jQuery寻找一个好的数据网格插件
- asp.net – 无法将索引35处的字节[FC]从指定的代码页转换为
- asp.net-mvc – 为什么ASP.NET MVC 4与IList for editor不能
推荐文章
站长推荐
- 如何使用ASP.NET Identity 3.0没有Entity Framew
- asp.net-mvc – ApplicationDbContext – 它在项
- asp.net – 找不到指定文化或中性文化的任何资源
- asp.net-mvc-4 – 无法获取MVC 4 FileExtensions
- asp.net – iFrame中的Response.Redirect(),重定
- asp.net-mvc-3 – Glimpse.axd 403ing在IIS上
- asp.net-mvc – 在DropDownList ASP.NET MVC中获
- asp-classic – 如何将字符串转换为日期时间格式
- 各大输入法分类词库内部格式的简单比较
- 在ASP.NET中使用区域5
热点阅读
