2011-12-03 42 views
1

我试图启动SqlDependency时遇到问题。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

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

或者:

var connectionString = dbContext.Database.Connection.ConnectionString; 

或者

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

反正EF不SqlDependency得到很好的发挥。 SqlDependency期望你自己编写SQL查询并让它们在你的控制之下。

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的ConnectionString。