В этой статье рассказывается, как создать базу данных с тестовыми данными с помощью ASP.NET Core 2.0 и Entity Framework Core 2.0. Мы будем использовать подход разработки «Code First» и использовать Entity Framework 2.0 для создания базы данных.

Сначала давайте установим SQL Server Express 2016 и обязательно установим Visual Studio 2017 с ASP.NET Core 2.0. Также мы используем Entity Framework Core для создания базы данных. Поэтому обязательно установите Entity Framework Core 2.0.

Сначала откройте Visual Studio и создайте новый веб-проект ASP.NET Core C#, обязательно выбрав ASP.NET Core 2.0 и шаблон Web Application Model-View-Controller.

Теперь создайте классы сущностей в папке Models. Давайте посмотрим на каждый класс сущностей.

using System;
using System.Collections.Generic;

namespace StudentManagementSystem.Models
{
    public class Student
    {

        public int StudentID { get; set; }

        public String FirstName { get; set; }

        public String LastName { get; set; }

        public DateTime DateOfBirth { get; set; }

        public String Address { get; set; }

        public String Email { get; set; }

        public List<Enrollment> Enrolements { get; set; }
    }
}


using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;

namespace StudentManagementSystem.Models
{
    public class Course
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int CourseID { get; set; }

        public String CourseName { get; set; }

        public String Description { get; set; }

        public List<Enrollment> Enrolements { get; set; }
    }
}


using System;

namespace StudentManagementSystem.Models
{
    public class Enrollment
    {
        public int EnrollmentID { get; set; }

        public int CourseID { get; set; }

        public int StudentID { get; set; }

        public DateTime EnrolementDate { get; set; }

        public Student Student { get; set; }

        public Course Course { get; set; }
    }
}

Существует связь «один ко многим» между сущностями «Студент» и «Зачисление», а также связь «один ко многим» между сущностями «Курс» и «Зачисление». Свойство ID станет столбцом первичного ключа таблицы базы данных, соответствующей классу. По умолчанию Entity Framework интерпретирует свойство с именем ID как первичный ключ.

Затем добавьте код в класс ApplicationDbContext в папке Data. Мы создали этот класс, производный от класса Microsoft.EntityFrameworkCore.DbContext. Это основной класс, который координирует функциональность Entity Framework для данной модели данных. Давайте посмотрим на класс ApplicationDbContext.

Приведенный выше код создает свойство DbSet для каждого набора сущностей. Здесь мы используем метод OnModelCreating(), чтобы сделать имя таблицы единственным. Потому что по умолчанию они во множественном числе, как имена свойств DbSet, и разработчики не согласны с этим.

Чтобы зарегистрировать ApplicationDbContext в качестве службы, вам нужно добавить приведенный ниже код в метод ConfigureServices.

Затем, чтобы настроить строку подключения, вам нужно отредактировать файл appsettings.json.

Строка подключения указывает базу данных SQL Server. Затем запустите проект. Entity framework создаст для вас пустую базу данных. Если вы хотите заполнить некоторые тестовые данные, вы можете написать метод, который вызывается после создания базы данных. Этот метод загружает тестовые данные в пустую базу данных. Ниже приведен класс, содержащий этот метод. Он находится в папке «Данные».

using StudentManagementSystem.Models;
using System;
using System.Linq;

namespace StudentManagementSystem.Data
{
    public static class DataBaseInitializer
    {
        public static void Initialize(ApplicationDbContext context)
        {
            context.Database.EnsureCreated();

            /*
            The code checks if there are any students in the database, and 
            if not, it assumes the database is new and needs to be seeded with test data.
            */
            if (context.Students.Any())
            {
                return;  //DataBase has been seed.
            }

            var students = new Student[]
            {
                new Student{FirstName = "Tharana", LastName = "Sanjuka",DateOfBirth = DateTime.Parse("1998-08-01"), Address = "No 102, Hakmana Road, Matara", Email = "[email protected]"},
                new Student{FirstName = "Buddila", LastName = "Manahara",DateOfBirth = DateTime.Parse("1990-02-25"), Address = "N0. 201, Galle Road, Colombo", Email = "[email protected]"},
                new Student{FirstName = "Anushan", LastName = "Madushanka",DateOfBirth = DateTime.Parse("1988-07-16"), Address = "Dimuthu, Kirinda, Puhulwella", Email = "[email protected]"},
                new Student{FirstName = "Dilshan", LastName = "Pamuditha",DateOfBirth = DateTime.Parse("1992-12-26"), Address = "Subodhi, Kirinda, Puhulwella", Email = "[email protected]"},
                new Student{FirstName = "Gimshan", LastName = "Achintha",DateOfBirth = DateTime.Parse("1996-05-15"), Address = "No 50/2, Ella Road, Badulla", Email = "[email protected]"}
            };
            foreach (Student s in students)
            {
                context.Students.Add(s);
            }
            context.SaveChanges();

            var courses = new Course[]
            {
                new Course{CourseID = 101, CourseName = "Software Engineering", Description = "This is a four year full time course"},
                new Course{CourseID = 201, CourseName = "Management", Description = "This is a four year full time course"},
                new Course{CourseID = 301, CourseName = "Diploma in English", Description = "This is a six months full time course"},
                new Course{CourseID = 401, CourseName = "Teaching", Description = "This is a three year full time course"},
                new Course{CourseID = 501, CourseName = "Nursing", Description = "This is a three year full time course"}
            };
            foreach (Course c in courses)
            {
                context.Courses.Add(c);
            }
            context.SaveChanges();

            var enrollments = new Enrollment[]
            {
                new Enrollment{CourseID = 501, StudentID = 1, EnrolementDate = DateTime.Parse("2017-11-26")},
                new Enrollment{CourseID = 401, StudentID = 2, EnrolementDate = DateTime.Parse("2017-11-27")},
                new Enrollment{CourseID = 301, StudentID = 3, EnrolementDate = DateTime.Parse("2017-11-26")},
                new Enrollment{CourseID = 201, StudentID = 4, EnrolementDate = DateTime.Parse("2017-11-27")},
                new Enrollment{CourseID = 101, StudentID = 5, EnrolementDate = DateTime.Parse("2017-11-28")}
            };
            foreach (Enrollment e in enrollments)
            {
                context.Enrollments.Add(e);
            }
            context.SaveChanges();
        }
    }
}

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

Мы можем выполнять операции CRUD, продолжая этот проект. Посмотрим в следующий раз.