Подтвердить что ты не робот

Entity Framework не может использовать DbContext, создавая модель

Я использую EF 4.1, и я создаю обычный EF edmx файл. Я генерирую его из БД.

Когда он был создан, щелкните правой кнопкой мыши и выберите элемент генерации кода, чтобы создать новые классы и вместо этого используйте DbContext. Я использую генератор шаблона DbContext.

Все работает отлично.

Затем я пытаюсь запросить контекст:

using (var context = new PasDBEntities())
{
    var client=context.ClientCompanies.SingleOrDefault(_=>_.ID==clientCompanyId);
    if(client!=null)

У меня нет проблем с созданием нового экземпляра контекста, но когда я пытаюсь запросить его, проблема возникает. Я застрял в UnintentionalCodeFirstException. И получает ошибку:

{ "Код, сгенерированный с использованием шаблонов T4 для разработки базы данных First и Model First, может работать некорректно, если используется в режиме Code First. Чтобы продолжить использование базы данных First или Model First, убедитесь, что строка подключения Entity Framework указана в файле конфигурации исполняемого приложения. Чтобы использовать эти классы, которые были сгенерированы из базы данных First или Model First, с кодом First добавьте любую дополнительную конфигурацию с использованием атрибутов или API DbModelBuilder, а затем удалите код, который генерирует это исключение." }

Я не хочу сначала использовать код, но я не знаю, могу ли я его отключить или где проблема.

Для справки, вот мой конструктор...

public partial class PasDBEntities : DbContext
{
    public PasDBEntities()
        : base("PasDBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

... и строка подключения:

<connectionStrings>
    <add name="PasDBEntities" 
         connectionString="metadata=res://*/PasDB.csdl|
                                    res://*/PasDB.ssdl|
                                    res://*/PasDB.msl;
                           provider=System.Data.SqlClient;
                           provider connection string=&quot;
                           data source=localhost;
                           initial catalog=PasDB;
                           integrated security=True;
                           pooling=False;
                           multipleactiveresultsets=True;
                           App=EntityFramework&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>
4b9b3361

Ответ 1

Я вижу, что вы используете EDMX с шаблонами (.tt) для генерации классов. Но если вы получаете информацию из существующей базы данных, мастер создаст ConnectionString, совместимый с ObjectContext (информация о метаданных и поставщик сущности).

Проблема заключается в том, что используемая строка соединения используется для ObjectContext (сначала для базы данных и для первой модели). Для DbContext вы должны использовать строку соединения без информации о метаданных.

Строка подключения должна быть:

<connectionStrings>
<add name="PasDBEntities" 
     connectionString="data source=localhost;
                       initial catalog=PasDB;
                       integrated security=True;
                       pooling=False;
                       multipleactiveresultsets=True;
                       App=EntityFramework"
     providerName="System.Data.SqlClient" />