2011-12-03 15 views
1

SqlDependencyを開始しようとすると問題が発生します。SqlDependencyがEntity Frameworkと連携しない

エラーは私に通知します:キーワードはサポートされていません: 'メタデータ'。

クラッシュする直前の直前のウィンドウから検索すると、接続文字列が次のようになります。

?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接続文字列が無効です。 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です。

関連する問題