2011-12-03 2 views
1

SqlDependency를 시작하려고 할 때 문제가 있습니다.SqlDependency가 Entity Framework에서 작동하지 않습니다.

오류는 다음과 같은 오류 메시지를 표시합니다. 지원되지 않는 키워드 : 'metadata'.

를 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 connectionstring이 유효하다고 생각하지 않습니다. 내가 어떻게 이것을 올바르게 사용할 수 있는지에 대한 아이디어는?

YeagerTechEntities dbContext = new YeagerTechEntities(); 

      ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; 

      SqlDependency.Start(objectContext.Connection.ConnectionString); 

답변

4

에는 EF 연결 문자열이 유효하지 않기 때문에. EntityConnection과 함께 작동하지만 SqlDependencySqlConnection을 사용합니다. 따라서 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을합니다.