SqlDependency не работает с Entity Framework - PullRequest
1 голос
/ 03 декабря 2011

У меня проблема при попытке запустить 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\""

Вот код. Вылетает при запуске метода. Очевидно, он не считает, что строка соединения EF является действительной. Любая идея о том, как я могу правильно использовать это?

YeagerTechEntities dbContext = new YeagerTechEntities();

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

            SqlDependency.Start(objectContext.Connection.ConnectionString);

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011

Поскольку строка подключения EF недопустима для SqlDependency.Работает только с EntityConnection, но SqlDependency использует SqlConnection.Поэтому вы должны либо использовать строку прямого соединения в вашем dbContext, либо извлечь строку соединения с базой данных из соединения сущностей.

Либо:

var connectionString = dbContext.Database.Connection.ConnectionString;

, либо

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

В любом случае EF не делаетНе очень хорошо играет с SqlDependency.SqlDependency ожидает, что вы сами пишете SQL-запросы и держите их под своим контролем.

1 голос
/ 11 декабря 2011

На самом деле фрагмент кода, который я запустил, выглядит следующим образом:

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.

...