C# – Create a complex data model – ASP.NET MVC with EF Core – Video
Creating a complex data model with the previous data model in ASP.NET is actually a challenging task.
The model in general looks like this:

It is not “extremely” complex, but it is something bigger than the previous 3 tables that we had before. Thus, in this tutorial some additional classes were added – a class per table. The seeding method was changed (twice actually), in order to seed data to the classes and a lot of data annotations were used, in order to display the data from the tables the way it was intended. E.g. in the Enrollments.cs entity, the annotation [DisplayFormat(NullDisplayText=”No grade”)] was used to display “no grade” when there was no entry for a grade in the DB. This is how the Student.cs class looks like with the annotations:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ContosoUniversity.Models
{
public class Student
{
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength=1)]
[Display(Name="Last Name")]
public string LastName { get; set; }
[StringLength(50, MinimumLength = 1)]
[Column("FirstName")]
[Display(Name="First Name")]
public string FirstMidName { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString ="{0:yyyy-MM-dd}",ApplyFormatInEditMode = true)]
[Display(Name="Enrollment Date")]
public DateTime EnrollmentDate { get; set; }
[Display(Name = "Full Name")]
public string FullName
{
get
{
return LastName + ", " + FirstMidName;
}
}
public ICollection<Enrollment> Enrollments{ get; set; }
}
}
At the end of the video, the SQL written to display all courses and all teachers is this one:
SELECT i.LastName, c.Title FROM Instructores i LEFT OUTER JOIN AsignacionesDeCurso adc ON adc.InstructorId = i.ID LEFT OUTER JOIN Cursos c ON c.CourseId = adc.CourseId
The rest of the classes are available in GitHub here – https://github.com/Vitosh/ASP/tree/master/EFCoreAsp.NetMvcWebApp/ContosoUniversity005
Enjoy!