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

Основа Entity Framework Core, создающая модель из существующей базы данных

С Entity Framework Core, как вы создаете модель EF и сущности?

Согласно ASP.NET Core - существующая база данных В статье Microsoft вам нужно запустить такую ​​команду в консоли диспетчера пакетов:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Это дает вам нулевой контроль над тем, какие таблицы или представления нужно импортировать. Возможно ли, что это единственный способ обратного проектирования базы данных и создания моделей и объектов EF в настоящее время с EF Core и как этот прогресс по сравнению с тем, как это было сделано с полной Entity Framework в течение многих лет?

4b9b3361

Ответ 2

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

Если я правильно понял ваш вопрос, вы хотите указать, какие таблицы следует генерировать. Это должно быть возможно, если вы добавите параметр -Tables в команду.

Вот команда, которую я использовал для создания 3 таблиц базы данных (в консоли диспетчера пакетов):

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;"  
     -Provider Microsoft.EntityFrameworkCore.SqlServer 
     -OutputDir Models -Context NorthwndContext 
     -Tables Products,Categories,Suppliers -Force

Как видите, я использую базу данных Northwnd и генерирую только таблицы "Продукты, категории и поставщики". Очевидно, что вы можете добавить больше таблиц, вам просто нужно разделить их запятыми.

Если вы не знаете, вы можете получить DatabaseName, перейдя в Data Connections (Обозреватель серверов), нажмите на базу данных, которую вы хотите добавить, и справа (Properties) вы увидите свойство (Name). Для меня это был "NORTHWND.MDF".

Я использовал -Force для переопределения любых Моделей, которые я уже создал.

Вы можете использовать -DataAnnotations для получения аннотированных моделей. В противном случае вы получите конфигурацию модели Fluent.

PS: я пробовал это только с ASP.NET Core 2 и Entity Framework Core 2.0.0.

Ответ 3

Моя ситуация заключалась в том, что у меня была библиотека классов .net 4.5+ с DbContexts.

Те DbContexts были созданы из существующей БД с использованием мастера "Сначала код из существующей базы данных". Этот Мастер, кажется, отсутствует в EF Core.

Чтобы создать новый Code First DbContext из существующей базы данных, совместимой с EF Core, я свободно следил за руководством здесь

Мои шаги:

  • Создана новая библиотека классов ядра

  • Добавлен пакет nuget Microsoft.EntityFrameworkCore

  • Добавлен пакет nuget Microsoft.EntityFrameworkCore.Tools
  • Добавлен пакет nuget Microsoft.EntityFrameworkCore.SqlServer
  • Добавлен пакет nuget Microsoft.EntityFrameworkCore.SqlServer.Design

  • Открыл консоль диспетчера пакетов nuget

  • Ввел команду

    Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"
    
  • Введено как провайдер

    Microsoft.EntityFrameworkCore.SqlServer
    

Обратите внимание, что при использовании неядерного проекта вы можете столкнуться с проблемами с консолью диспетчера пакетов nuget. Я избегал этой проблемы, просто создав новую библиотеку базового класса, а не .NET.

Как только вы создали контекст, вы можете отредактировать его, как обычно, в Code First, например. вы можете удалить таблицы, которые вы не хотите использовать.

Ответ 4

Вы также можете применить метод cheater: откройте VS2015, создайте новый класс lib с тем же именем, что и фактический проект, а затем запустите мастер модели данных сущности.

Как только вы закончите, скопируйте и вставьте в свой основной проект .net. Требуется немного исправления для полученного кода, но это тривиально.

Однако выполнение команды scaffold, как указано выше, является лучшим решением.

Ответ 5

Я получил эту ошибку при первом использовании базы данных:

Не удалось загрузить тип 'Microsoft.EntityFrameworkCore.Infrastructure.DesignTimeProviderServicesAttribute' из сборки 'Microsoft.EntityFrameworkCore, Version = 2.0.0.0, Культура = нейтральная, PublicKeyToken = adb9793829ddae60 '

имеется 4 добавленных пакета:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />

и команда:

Scaffold-DbContext "Data Source=xxxx;Initial Catalog=xxx;UID=sa;PWD=xxx;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities/DB

Ответ 6

Те, кто хочет преобразовать схему базы данных Sql в ядро EF, используя ядро dotnet, выполняют следующие шаги:

Запускайте все команды одну за другой (первая команда для тех, кто хочет создать новый проект, иначе вы можете проигнорировать это и просто запустить другие команды из корневой папки вашего проекта)

dotnet new mvc -o <ProjectName>

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design

dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design

dotnet add package Microsoft.EntityFrameworkCore.Tools

dotnet tool install --global dotnet-aspnet-codegenerator

В заключение...

dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

Это создаст необходимые модели и контекст вашей схемы БД в папке моделей вашего проекта.

Теперь вы легко можете сгенерировать код CRUD, применив следующую команду:

dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries 

Измените MyNewController на желаемое имя контроллера, ModelName с именем модели в папке моделей, на которую вы хотите настроить таргетинг, и, наконец, MyDbContext с сгенерированным системой именем файла контекста, доступным в папке Models

но перед запуском этой команды убедитесь, что вы внесли необходимые изменения в файлы appsettings.json и startup.cs в папке вашего проекта

appsettings.json добавить после строки

"AllowedHosts": "*",

 "ConnectionStrings": {
    "MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
  }

файл startup.cs добавить прямо перед строкой

. Services.AddMvc() SetCompatibilityVersion (CompatibilityVersion.Version_2_2);

services.AddDbContext<SwiftRbs_LocalContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));

Наслаждаться!!