Я изучаю ASP. NET MVC и EF с Начало работы с EF 6 с использованием учебника MVC 5 (пример приложения Университета Контозо). Это мой первый вопрос здесь, так что извините, если форма вопроса не идеальна (в любом случае, скажите мне, что не так).
Я придерживался отношения многих ко многим. Таблица создана, но внутри нет данных.
Я добавил свойства виртуальной навигации в оба класса и установил сопоставления в SchoolContext.
Course.cs
public class Course
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Display(Name = "Numer")]
public int ID { get; set; }
[StringLength(50, MinimumLength = 3)]
[Display(Name = "Przedmiot")]
public string Title { get; set; }
[Range(0, 5)]
[Display(Name = "ECTS")]
public int Credits { get; set; }
public int DepartmentID { get; set; }
public virtual Department Department { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
public virtual ICollection<Instructor> Instructors { get; set; }
}
Instructor.cs
public class Instructor
{
public int ID { get; set; }
[Required]
[Display(Name = "Nazwisko")]
[StringLength(50)]
public string LastName { get; set; }
[Required]
[Column("FirstMidName")]
[Display(Name = "Imię")]
[StringLength(50)]
public string FirstName { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Data zatrudnienia")]
public DateTime HireDate { get; set; }
public string FullName
{
get
{
return LastName + " " + FirstName;
}
}
public virtual ICollection<Course> Courses { get; set; }
public virtual OfficeAssignment OfficeAssignment { get; set; }
}
SchoolContext.cs
public class SchoolContext : DbContext
{
public SchoolContext() : base("SchoolContext")
{
}
public DbSet<Course> Courses { get; set; }
public DbSet<Department> Departments { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Instructor> Instructors { get; set; }
public DbSet<Student> Students { get; set; }
public DbSet<OfficeAssignment> OfficeAssignments { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Course>()
.HasMany(c => c.Instructors).WithMany(i => i.Courses)
.Map(t => t.MapLeftKey("CourseID")
.MapRightKey("InstructorID")
.ToTable("CourseInstructor"));
}
}
Данные инициализируются в Migrations / Configuration.cs в методе Seed ():
protected override void Seed(MyUniversity.DAL.SchoolContext context)
{ (...)
var instructors = new List<Instructor>
{
new Instructor { FirstName = "Antoni", LastName = "Czerwiński", HireDate = DateTime.Parse("2016-07-01")},
new Instructor { FirstName = "Czesław", LastName = "Piotrowski", HireDate = DateTime.Parse("2016-07-01")},
new Instructor { FirstName = "Paweł", LastName = "Andrzejewski", HireDate = DateTime.Parse("2016-07-01")},
new Instructor { FirstName = "Karol", LastName = "Sokołowski", HireDate = DateTime.Parse("2016-07-01")},
new Instructor { FirstName = "Alojzy", LastName = "Woźniak", HireDate = DateTime.Parse("2016-07-01")}
};
instructors.ForEach(s => context.Instructors.AddOrUpdate(p => p.LastName, s));
context.SaveChanges();
var courses = new List<Course>
{
new Course { ID = 1050, Title = "Chemia", Credits =3,
DepartmentID = departments.Single(s => s.Name == "Inżynierii").ID, Instructors = new List<Instructor>() },
new Course { ID = 4022, Title = "Mikroekonomia", Credits =3,
DepartmentID = departments.Single(s => s.Name == "Ekonomiczny").ID, Instructors = new List<Instructor>() },
new Course { ID = 4041, Title = "Makroekonomia", Credits =3,
DepartmentID = departments.Single(s => s.Name == "Ekonomiczny").ID, Instructors = new List<Instructor>() },
new Course { ID = 1045, Title = "Rachunek Różniczkowy", Credits =4,
DepartmentID = departments.Single(s => s.Name == "Matematyki").ID, Instructors = new List<Instructor>() },
new Course { ID = 3141, Title = "Trygonometria", Credits =4,
DepartmentID = departments.Single(s => s.Name == "Matematyki").ID, Instructors = new List<Instructor>() },
new Course { ID = 2021, Title = "Kompozycja", Credits =3,
DepartmentID = departments.Single(s => s.Name == "Anglistyki").ID, Instructors = new List<Instructor>() },
new Course { ID = 2042, Title = "Literatura", Credits =4,
DepartmentID = departments.Single(s => s.Name == "Anglistyki").ID, Instructors = new List<Instructor>() }
};
courses.ForEach(s => context.Courses.AddOrUpdate(p => p.ID, s));
context.SaveChanges();
(...)
}
DbTablesRelationsImage
DbCourseInstructorTableImage
Вот ссылка на проект на моем github, если необходимо: MyGithub
Редактировать (14:15)
У меня есть метод в Семя, которое назначает инструкторов на курсы. Но вопрос в том, почему в таблице до сих пор нет данных?
protected override void Seed(MyUniversity.DAL.SchoolContext context)
{ (...)
AddOrUpdateInstructor(context, "Chemia", "Sokołowski");
AddOrUpdateInstructor(context, "Chemia", "Andrzejewski");
AddOrUpdateInstructor(context, "Mikroekonomia", "Woźniak");
AddOrUpdateInstructor(context, "Makroekonomia", "Woźniak");
AddOrUpdateInstructor(context, "Rachunek Różniczkowy", "Piotrowski");
AddOrUpdateInstructor(context, "Trygonometria", "Andrzejewski");
AddOrUpdateInstructor(context, "Kompozycja", "Czerwiński");
AddOrUpdateInstructor(context, "Literatura", "Czerwiński");
context.SaveChanges();
}
void AddOrUpdateInstructor(SchoolContext context, string courseTitle, string instructorName)
{
var crs = context.Courses.SingleOrDefault(c => c.Title ==
courseTitle);
var inst = context.Instructors.SingleOrDefault(i => i.LastName ==
instructorName);
if (inst == null)
{
crs.Instructors.Add(context.Instructors.Single(i => i.LastName ==
instructorName));
}
}