DbContext и строка подключения (поставщик не вернул строку ProviderManifestToken)

Есть ли способ передать строку подключения конструктору DbContext. Я действительно ненавижу идею иметь параметр конфигурации в приложении или web.config

Когда вы хотите сослаться на свою dll, содержащую вашу модель EF, вы должны помнить о копировании этой глупой конфигурации вместо того, чтобы хранить ее в центральном расположении и иметь доступ к этому параметру конструктора, независимо от того, куда идет dll.

Возможно ли это или мы вынуждены жить с этим разочарованием? Не каждая модель EF живет в веб-приложении или исполняемом файле.

Спасибо

ОБНОВЛЕНИЕ: я думал, что эта ошибка связана с отсутствующей строкой подключения в файле конфигурации. Я передаю объект SqlConnection, и он дает мне ту же ошибку. Почему возникает эта ошибка?


person Arturo Martinez    schedule 26.10.2011    source источник


Ответы (1)


Вы можете использовать перегрузку конструктора DbContext который принимает строку, которая может быть строкой подключения.

string connectionString = "metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=\"data source=localhost;initial catalog=Test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework\"";
using (DbContext db = new DbContext(connectionString))
{
    var m = db.Set<Main>().Take(1).First();
    Console.WriteLine(m.Id);
}
person Jeff Ogata    schedule 26.10.2011
comment
Это именно то, что я делаю, но каждый раз, когда я не нацеливаюсь на свой экземпляр localhost\SQLEXPRESS, выдает и выдает ошибку: The provider did not return a ProviderManifestToken string. - person Arturo Martinez; 27.10.2011
comment
Не уверен, почему вы получаете эту ошибку. Я скопировал строку подключения из файла конфигурации, создал с ней DbContext, и это сработало. Отредактирует ответ, чтобы включить код для сравнения. - person Jeff Ogata; 27.10.2011
comment
Вам нужно, чтобы файлы метаданных были указаны в строке подключения, чтобы это работало? Я думал, что подход POCO не нуждается ни в каких метаданных. Я передаю простую строку подключения к SQL Server для существующей базы данных, структуру которой я не планирую изменять. - person Arturo Martinez; 27.10.2011
comment
Еще один момент: я наследую от DbContext и пытаюсь инициализировать некоторые значения, обращаясь к поставщику свойств DbSet‹T›. - person Arturo Martinez; 27.10.2011
comment
Через DataAnnotations в моих классах POCO - person Arturo Martinez; 27.10.2011