dir.by  
  Поиск  
Программирование, разработка, тестирование
.NET Core
Entity Framework в приложении ASP.NET Core MVC. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
  Посмотрели 8485 раз(а)    
 Entity Framework в приложении ASP.NET Core MVC. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами) 
последнее обновление: 27 февраля 2019
Entity Framework предоставляет возможность работы с Базой данных через C# код.
Рассмотрим подход Code First (пишем C# код, а таблицы в Базе данных создаются автоматически по C# коду).
Шаг 1. Создаем новое приложение ASP.NET Core MVC
Шаг 2. Добавляем библиотеку Entity Framework используя NuGet
Для работы с баззой данных MS SQL Server через Entity Framework нам нужны NuGet пакеты:
Microsoft.EntityFrameworkCore.SqlServer (для работы с базой данных)
Microsoft.EntityFrameworkCore.Tools (утилита для создания базы данных)

Чтобы добавить пакеты нужно нажать: ToolsNuGet Package ManagerManage NuGet Packages for Solution...

На заметку! Если мы работаем с проектом ASP.NET Core 2.1
то эти пакеты по умолчаню уже добавлены
Шаг 3. Создаем соединиение с Базой данных Microsoft SQL Server в файле appsettings.json
Добавим соединение с базой данных
  json     Файл appsettings.json
{
     "ConnectionStrings": {
          "DefaultConnection": "Server=EVGENI\MSSQLSERVER2012; Database=MyBooks; Trusted_Connection=True; MultipleActiveResultSets=true"
     },


     "Logging": {
          "LogLevel": {
               "Default": "Warning"
          }
     },

     "AllowedHosts": "*"
}
На заметку!
Server=EVGENIMSSQLSERVER2012 это имя сервера базы данных (SQL Server name). Сервер базы данных может находится локально или на другом компьютере. Имя сервера базы данных появляется при открытии SQL Server Management Studio (на картинке нарисовано).
Database=MyBooks это название базы данных. Если такое название не существует то новая база данных будет создана.
Шаг 4. Создаем папку Models и добавляем классы Book и BookContext
Создаем папку Models
На папке Models нажимаем мышкой и создадим новый файл
В файле Models/Book.cs напишем код
  C#     Файл Book.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using Microsoft.EntityFrameworkCore; // Entity Framework Core

namespace BookLibrary.Models
{
     // контекст для работы с базой данных (добавление, удаление)
     public class BookContext : DbContext
     {
          public DbSet<Book> Books { get; set; }

          // конструктор
          public BookContext(DbContextOptions<BookContext> options) : base(options)
          {
               Database.EnsureCreated();
          }
     }

     // данные для базы данных
     public class Book
     {
          public int Id { get; set; }
          public string Name { get; set; }
          public string Author { get; set; }
     }
}
Шаг 5. Добавляем сервис базы данных в файл Startup.cs
Новые добавленные строчки помеченные синим
  C#     Файл Startup.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

using Microsoft.Extensions.Configuration;
using BookLibrary.Models;
using Microsoft.EntityFrameworkCore; // add for sql server (options => options.UseSqlServer(connection))


namespace BookLibrary
{
     public class Startup
     {
          public Startup(IConfiguration configuration)
          {
               Configuration = configuration;
          }

          public IConfiguration Configuration { get; }


          // This method gets called by the runtime. Use this method to add services to the container.
          // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
          public void ConfigureServices(IServiceCollection services)
          {
               // add db connection
               string connection = Configuration.GetConnectionString("DefaultConnection");
               services.AddDbContext<BookContext>(options => options.UseSqlServer(connection));


               services.AddMvc();
          }

          // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
          public void Configure(IApplicationBuilder app, IHostingEnvironment env)
          {
               if (env.IsDevelopment())
               {
                    app.UseDeveloperExceptionPage();
               }

               app.UseMvc(routes =>
               {
                    routes.MapRoute(
                         name: "default",
                         template: "{controller=Home}/{action=Index}/{id?}");
               });

               //app.Run(async (context) =>
               //{
               //     await context.Response.WriteAsync("Hello World!");
               //});
          }
     }
}
Шаг 6. Инициализация Базы Данных на запуск программы (добавляем класс BooksInit в папку Models)
В файле Models/BooksInit.cs напишем код
  C#     Файл BooksInit.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace BookLibrary.Models
{
     public class BooksInit
     {
          public static void Initialize(BookContext context)
          {
               if (!context.Books.Any())
               {
                    // добавляем книги
                    context.Books.AddRange(
                         new Book
                         {
                              Name = "Фантастическое путешествие",
                              Author = "Айзек Азимов",
                         },

                         new Book
                         {
                              Name = "Неукротимая планета",
                              Author = "Гарри Гаррисон",
                         },

                         new Book
                         {
                              Name = "Изучаем C#",
                              Author = "Эндрю Стиллмен",
                         },

                         new Book
                         {
                              Name = "Мастер и Маргарита",
                              Author = "Михаил Булгаков",
                         }
                    );

                    // сохраняем в базу данных
                    context.SaveChanges();
               }
          }
     }
}
На заметку!
При первом запуске программы в базе данных создадутся записи.
При втором запуске программы и других запусках программы в базе данных новые записи создаваться не будут.
Шаг 7. Вызов инициализации Базы Данных (файл Program.cs)
Исправим файл Program.cs
  C#     Файл Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

using Microsoft.Extensions.DependencyInjection;
using BookLibrary.Models;


namespace BookLibrary
{
     public class Program
     {
          public static void Main(string[] args)
          {
               // CreateWebHostBuilder(args).Build().Run();

               var host = CreateWebHostBuilder(args).Build();

               using (var scope = host.Services.CreateScope())
               {
                    var services = scope.ServiceProvider;
                    try
                    {
                         var context = services.GetRequiredService<BookContext>();
                         BooksInit.Initialize(context);
                    }
                    catch (Exception ex)
                    {
                         var logger = services.GetRequiredService<ILogger<Program>>();
                         logger.LogError(ex, "An error occurred while seeding the database.");
                    }
               }

               host.Run();

          }

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
               WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();
     }
}
Шаг 8. Исправим HomeController (файл Controllers/HomeController.cs)
  C#     Файл HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

using BookLibrary.Models;

namespace BookLibrary.Controllers
{
     public class HomeController : Controller
     {
          BookContext db;

          public HomeController(BookContext context)
          {
               db = context;
          }

          public IActionResult Index()
          {
               return View(db.Books.ToList());
          }


     }
}
Шаг 9. Исправим представление (файл Views/Home/Index.cshtml)
  cshtml     Файл Index.cshtml
@model IEnumerable<BookLibrary.Models.Book>

@{
     Layout = null;
}

<!DOCTYPE html>

<html>
<head>
     <meta name="viewport" content="width=device-width" />
     <title>Библиотека книг</title>
</head>

<body>
     <h3>Книги</h3>

     <table border="1">
          <tr>
               <th>Название книги</th>
               <th>Автор</th>
          </tr>
          @foreach (var book in Model)
          {
               <tr>
                    <td>@book.Name</td>
                    <td>@book.Author</td>
               </tr>
          }
     </table>
</body>

</html>
Шаг 10. Запускаем приложение
Нажимаем вверху на зеленый треугольник
Откроется страница в браузере и мы увидим
 
← Предыдущая тема
Встроенный контейнер IoC в ASP.NET Core
 
Следующая тема →
Telerik (Kendo UI) в ASP.NET Core MVC (подключаем Kendo js файлы используя NPM и Webpack)
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

  Объявления  
  Объявления  
 
Что такое .NET Core ?
Создаем новое консольное приложение .NET Core
ASP.NET Core
Что такое ASP.NET Core ?
Создаем новое приложение ASP.NET Core
ASP.NET Core MVC
Создаем новое приложение ASP.NET Core MVC
Встроенный контейнер IoC в ASP.NET Core

База данных (Entity Framework) в ASP.NET Core MVC
Entity Framework в приложении ASP.NET Core MVC. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)

Telerik (Kendo UI) в ASP.NET Core MVC
Telerik (Kendo UI) в ASP.NET Core MVC (подключаем Kendo js файлы используя NPM и Webpack)

Аутентификация (login/register/logout) в приложении ASP.NET Core MVC
Аутентификация (authentication) это login/register/logout в приложении ASP.NET Core MVC
Дополнительные темы, вопросы
Инсталлируем новую версию (.NET 6.0) для Visual Studio 2022. На заметку! .NET 6.0 не устанавливается и не работает для Visual Studio 2019
Инсталлируем новую версию (.NET Core 2.2) для Visual Studio 2019
Выбор между ASP.NET Core и ASP.NET ?
Перенос кода в .NET Core из .NET Framework
Error "unable to connect to web server "iis express" | ASP.NET Core | Visual Studio 2017
Error "This site can't be reached" when run ASP.NET Core application | Solution: Recreate the Self-Signed HTTPS Certificate for localhost in IIS Express
WWW сайты для изучения
Сайты для изучения ASP.NET Core

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика