Как разрешить предупреждение: элемент "entityFramework" имеет неверный дочерний элемент "поставщики". Список ожидаемых элементов: "контексты"

Я играю с EF разными рабочими процессами. Вчера я сделал новый проект, и Entity Framework 6 было первым предложением от Nuget, поэтому я решил попробовать, также это очень маленький проект целиком для обучения, поэтому я думаю, что будет хороший опыт попробовать EF 6 так как я работал в основном с Ef 5.

Мое приложение основано на подходе Code First. Структура решения отображается на экране печати:

Solution Tree

Проект CodeFirstClasses предназначен для хранения моих Entites. Для простоты и потому, что я следую руководству, я использую только один класс, как вы можете видеть - Customer.cs. Там у меня есть:

public class RewardContext : DbContext
    { 
        //Specify the name of the base as Rewards
        public RewardContext() : base("Rewards")
        { 
        }

        //Create a database set for each data item
        public DbSet<Purchase> Purchases { get; set; }
        public DbSet<Customer> Customers { get; set; }

    }

И другие классы - Purchase и Customer, которые тривиальны, поэтому я не буду вставлять их здесь.

Другой проект, который вы видите, - это проект Windows Forms с только одной формой и кнопкой на нем. В событии click кнопки у меня есть вся логика добавления новых записей к моим двум объектам, жестко закодированным. Вот лишь часть его:

    //some code...
    //Add the record and save it
    context.Customers.Add(newCustomer);
    context.Purchases.Add(newPurchase);
    context.SaveChanges();

    MessageBox.Show("Record Added!");

Пока что ничего не отличается от того, с чем я привык с Ef 5. Я могу построить проект, я могу запустить его, и все выполняется, как ожидалось. Однако я получаю это предупреждение от названия:

Warning 1 The element 'entityFramework' has invalid child element 'providers'. List of possible elements expected: 'contexts'. И хотя я использую в основном MS SQL Server Management Studio, я заметил, что я не могу управлять своими подключениями/базами данных из IDE - Visual Studio 2012, но это не проблема с Ef 5.

Мои исследования сузили возможный источник проблемы/решения для ручного изменения файла App.config, но это область, в которой у меня не было большого опыта, особенно когда IDE позаботилась об этом до EF 6. Поэтому я отправлю оба файла App.config для этого решения:

Один из проекта CodeFirstClasses:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

И из моего проекта TestCodeFirst:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

И другое возможное решение, которое я нашел, это: updating the xsd for "validating" EF config section in web/app.config file to recognize newly added EF6 elements, который я также не знаю, как именно это сделать.

Несмотря на то, что когда я открываю MS SQL Server Management Studio, я вижу базу данных, созданную для этого приложения, записи сохраняются и, как правило, работают, но я хотел бы разрешить это предупреждение и узнать, как настроить мои приложения на основе EF 6 справа.

Ответы

Ответ 1

Вы можете установить EF6 Designer для VS2012 из здесь, и он обновит схему, которая проверяет файлы конфигурации.

Ответ 2

Схема конфигурации была изменена с 5 по 6. Как говорится, поставщики node были заменены контекстами node.

Идея состоит в том, что вы можете настроить поставщиков отдельно, а не все контексты, используя один и тот же провайдер. (Это происходит в тандеме с возможностью иметь несколько контекстов, которые находятся в одной базе данных. Это называлось многопользовательским, но позже было переименовано в более сжатый текст).