尝试启动SqlDependency时遇到问题。
错误通知我:不支持关键字:'元数据'。
在碰撞之前从立即窗口检索时,connectionstring是以下内容。
?objectContext.Connection.ConnectionString
"metadata=res://*/YeagerTech.csdl|res://*/YeagerTech.ssdl|res://*/YeagerTech.msl;provider=System.Data.SqlClient;provider connection string=\"data source=Bill-PC;initial catalog=YeagerTech;integrated security=True;multipleactiveresultsets=True;App=EntityFramework\""
这是代码。它在Start方法上崩溃了。显然,它不认为EF连接字符串是有效的。我知道如何正确使用它吗?
YeagerTechEntities dbContext = new YeagerTechEntities();
ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
SqlDependency.Start(objectContext.Connection.ConnectionString);
答案 0 :(得分:4)
因为EF连接字符串对SqlDependency
无效。它仅适用于EntityConnection
,但SqlDependency
使用SqlConnection
。因此,您必须在dbContext中使用直接连接字符串,或者从实体连接中提取数据库连接字符串。
或者:
var connectionString = dbContext.Database.Connection.ConnectionString;
或者
var connectionString = ((EnityConnection)objectContext.Connection).StoreConnection.ConnectionString;
无论如何,EF与SqlDependency
的效果不佳。 SqlDependency希望您自己编写SQL查询并将它们置于您的控制之下。
答案 1 :(得分:1)
实际上,我让它工作的代码片段如下:
YeagerTechEntities dbContext = new YeagerTechEntities();
ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
Application["dbContext"] = dbContext;
objectContext.Connection.ConnectionString =
ConfigurationManager.ConnectionStrings["YeagerTechEntities"].ConnectionString;
SqlDependency.Start(((System.Data.EntityClient.EntityConnection)objectContext.Connection)
.StoreConnection.ConnectionString);
YeagerTechEntities是EF连接字符串。