Entity Framework не может использовать DbContext, модель создается - PullRequest
10 голосов
/ 30 октября 2011

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

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

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

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

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

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

{"Код, сгенерированный с использованием шаблонов T4 для разработки базы данных первой и первой модели, может работать некорректно, если используется в режиме первого кода. Для продолжения использования базы данных первой или первой модели убедитесь, чтострока подключения Entity Framework указана в файле конфигурации исполняемого приложения. Чтобы использовать эти классы, которые были сгенерированы из Database First или Model First, с Code 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>

1 Ответ

7 голосов
/ 08 ноября 2012

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

Проблема в том, что используемая вами строка соединения предназначена для 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" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...