Главный класс, координирующий функциональность MvcCore 2.0 для текущей модели данных называется database context. Данный класс наследуется от System.Data.Entity.DbContext. В коде вы определяете, какие сущности включить в модель данных, и также можете определять поведение самого MvcCore. В нашем коде этот класс имеет название SchoolContext.
КлассSchoolContex.cs
using KP.Models;
using Microsoft.EntityFrameworkCore;
namespace KP.Data
{
publicclassSchoolContext: DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> options)
: base(options)
{
}
public DbSet<Predmet> Predmets { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Student> Students { get; set; }
public DbSet<Kafedra> Kafedras { get; set; }
public DbSet<Prepod> Prepods { get; set; }
public DbSet<GroupName> GroupNames { get; set; }
public DbSet<Office_Assignment> Office_Assignments { get; set; }
public DbSet<Predmet_Assignment> Predmet_Assignments { get; set; }
public DbSet<Person> People { get; set; }
protectedoverridevoid OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().ToTable("Person");
modelBuilder.Entity<Predmet>().ToTable("Predmet");
modelBuilder.Entity<Enrollment>().ToTable("Ball");
modelBuilder.Entity<Kafedra>().ToTable("Kafedra");
modelBuilder.Entity<Prepod>().ToTable("Prepod");
|
|
modelBuilder.Entity<Office_Assignment>().ToTable("Prepod_location");
modelBuilder.Entity<Predmet_Assignment>().ToTable("Group_Predmet_Prepod");
modelBuilder.Entity<Predmet_Assignment>()
.HasKey(c =>new{ c.PredmetID, c.PrepodID});
}
}
}
Инициализация базы данных с тестовыми данными
MvcCore может автоматически создать базу данных при запуске приложения. Вы можете указать, что это должно выплоняться при каждом запуске приложения или только тогда, когда модель рассинхронизирована с существующей базой. Вы можете также написать класс с методом, который MvcCore будет автоматически вызывать перед созданием базы для использования её с тестовыми данными. Мы укажем, что база должна удаляться и пересоздаваться при изменении модели.
Класс DbInitializer.cs
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using KP.Models;
using System.Collections.Generic;
namespace KP.Data
{
publicstaticclassDbInitializer
{
publicstaticvoid Initialize(SchoolContext context)
{
context.Database.EnsureCreated();
// Look for any students.
if (context.Students.Any())
{
return; // DB has been seeded
}
var students = new List<Student>()
{
};
foreach (Student s in students)
{
context.Students.Add(s);
}
context.SaveChanges();
var groupname = new GroupName[]
{
};
foreach (GroupName c in groupname)
{
context.GroupNames.Add(c);
}
context.SaveChanges();
var prepods = new Prepod[]
{
};
foreach (Prepod i in prepods)
{
context.Prepods.Add(i);
}
context.SaveChanges();
var kafedras = new Kafedra[]
{
};
foreach (Kafedra d in kafedras)
{
context.Kafedras.Add(d);
}
context.SaveChanges();
var predmet = new Predmet[]
{
};
foreach (Predmet c in predmet)
|
|
{
context.Predmets.Add(c);
}
context.SaveChanges();
var office_Assignments = new Office_Assignment[]
{
};
foreach (Office_Assignment o in office_Assignments)
{
context.Office_Assignments.Add(o);
}
context.SaveChanges();
var predmetPrepods = new Predmet_Assignment[]
{
};
foreach (Predmet_Assignment ci in predmetPrepods)
{
context.Predmet_Assignments.Add(ci);
}
context.SaveChanges();
var enrollments = new Enrollment[]
{
};
foreach (Enrollment e in enrollments)
{
var enrollmentInDataBase = context.Enrollments.Where(
s =>
s.StudentID == e.StudentID &&
s.Predmet.PredmetID == e.PredmetID).SingleOrDefault();
if (enrollmentInDataBase == null)
{
context.Enrollments.Add(e);
}
}
context.SaveChanges();
}
}
}
ПредставлениеUspex
Index.cshtml – главная веб-страничка
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8"/>
<metaname="viewport"content="initial-scale=1.0"/>
<title>@ViewData["Title"] - Универститет Де Сада</title>
< environmentinclude ="Development">
<linkrel="stylesheet"href="~/lib/bootstrap/dist/css/bootstrap.css"/>
<linkrel="stylesheet"href="~/css/site.css"/>
</ environment >
< environmentexclude ="Development">
< link rel="stylesheet" href ="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href ="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class ="sr-only" asp-fallback-test-property ="position" asp-fallback-test-value ="absolute"/>
< link rel="stylesheet" href ="~/css/site.min.css" asp-append-version ="true"/>
</ environment >
</head>
<body>
<center><imgsrc="~/images/database.jpg"/></center>
<navclass="navbar navbar-inverse navbar-fixed-top">
<divclass="container">
<divclass="navbar-header">
<buttontype="button"class="navbar-toggle"data-toggle="collapse"data-target=".navbar-collapse">
<spanclass="icon-bar"></span>
<spanclass="icon-bar"></span>
<spanclass="icon-bar"></span>
</button>
< aasp-area ="" asp-controller ="Home" asp-action ="Index"class="navbar-brand">УниверситетДеСада</ a >
</div>
<divclass="navbar-collapse collapse">
<ulclass="nav navbar-nav">
<li>< aasp-area ="" asp-controller ="GroupNames" asp-action ="Index">Кланы</ a ></li>
<li>< aasp-area ="" asp-controller ="Students" asp-action ="Index">Садисты</ a ></li>
<li>< aasp-area ="" asp-controller ="Enrollments" asp-action ="Index">Оценки</ a ></li>
<li>< aasp-area ="" asp-controller ="Predmets" asp-action ="Index">Предметы</ a ></li>
<li>< aasp-area ="" asp-controller ="Prepods" asp-action ="Index">Мастера</ a ></li>
<li>< aasp-area ="" asp-controller ="Kafedras" asp-action ="Index">Кафедра</ a ></li>
<li>< aasp-area ="" asp-controller ="Uspex" asp-action ="Srball">Среднийбалл</ a ></li>
<li>< aasp-area ="" asp-controller ="Uspex" asp-action ="delStud">Бал< 60</ a ></li>
</ul>
</div>
</div>
</nav>
</body>
</html>
Рисунок 5 – Стартовая страничка, представление Uspex->index.cshtml