1

尝试启动 SqlDependency 时遇到问题。

该错误通知我:不支持关键字:'元数据'。

在崩溃之前从即时窗口检索时,连接字符串如下。

?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);
4

2 回答 2

4

因为 EF 连接字符串对SqlDependency. 它仅适用于EntityConnectionSqlDependency使用SqlConnection. 因此,您必须在 dbContext 中使用直接连接字符串或从实体连接中提取数据库连接字符串。

任何一个:

var connectionString = dbContext.Database.Connection.ConnectionString;

或者

var connectionString = ((EnityConnection)objectContext.Connection).StoreConnection.ConnectionString;

无论如何,EF 与SqlDependency. SqlDependency 期望您自己编写 SQL 查询并让它们在您的控制之下。

于 2011-12-04T15:44:38.973 回答
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 连接字符串。

于 2011-12-11T06:23:12.260 回答