2011-12-03 66 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。