Entity Framework 6 против Entity Framework Core - тонкие различия? - PullRequest
0 голосов
/ 11 апреля 2020

Я пишу WPF-приложение. NET Framework и использую Entity Framework. Сначала я установил пакет EF Core, и при выполнении моего первого add-migration я получил известную ошибку

Невозможно создать объект типа 'DbContext'. Для различных шаблонов, поддерживаемых во время разработки, см. https://go.microsoft.com/fwlink/?linkid=851728

Однако, это не то, о чем мой вопрос. Я знал, что заставил его работать раньше, и заметил, что именно тогда я использовал EF 6 вместо EF Core. Поэтому я удалил пакеты EF Core и установил пакет EF 6. И теперь с EF 6 миграция работает просто отлично, и это здорово.

Но мой вопрос: почему IS работает? Несмотря на то, что я не изменил свой код, добавив IDesignTimeFactory<DbContext> или внедрение зависимостей для создания экземпляра моего DbContext класса. Тем не менее, он все еще работает, просто переключившись обратно на EF 6. Я не смог найти никакой информации о различиях между этими двумя (то есть EF Core и EF 6), которая бы это объяснила. Так что теперь я надеюсь, что кто-то здесь сможет просветить меня своими обширными знаниями.

Для справки, вот мой класс DbContext:

public class PinboardContext : DbContext
{
    public PinboardContext() : base()
    {
    }

    public DbSet<Item> Items { get; set; }
}

Мой класс App.xaml.cs пуст из пустого конструктора.

Наконец, если это важно, у меня есть connectionString, определенная в app.config следующим образом:

  <connectionStrings>
      <add name="mpcn" connectionString="Data Source=(localdb)\MSSQLLocalDB;  Initial Catalog=MyPinboardDB;Integrated Security=True;" providerName="System.Data.SqlClient"/>
  </connectionStrings>

Обратите внимание, что я уже посмотрел на это но это не помогло мне ответить на мой вопрос.

1 Ответ

0 голосов
/ 11 апреля 2020

Возможно, потому что вы должны передать DbContextOptions<PinboardContext> в ваш базовый класс DbContext.

Если опции не предоставлены, EF6 использует строку соединения из файла конфигурации с именем производного DbContext, или произошел сбой при условии, что при установке базы данных по умолчанию предполагается наличие базы данных с именем производного DbContext.

EF Core требует предоставления параметров.

В EF Core не требуется, чтобы DbContext создается путем инъекции. Если он создан путем инъекции, он должен быть настроен с соответствующим DbContextOptions<T>. Если создано непосредственно, DbContextOptions<T> должен быть предоставлен непосредственно.

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