SqlDependency不使用Entity Framework

时间:2011-12-03 01:17:00

标签: caching entity-framework-4.1 sqldependency

尝试启动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);

2 个答案:

答案 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连接字符串。