在本章中,我们将学习如何在应用程序中有多个DbContext类时将更改迁移到数据库中.
多个DbContext最初是在Entity Framework 6.0中引入的.
多个上下文类可能属于一个数据库或两个不同的数据库.
在我们的示例中,我们将为同一个数据库定义两个Context类.在以下代码中,学生和教师有两个DbContext类.
public class Student { public int ID { get; set; } public string LastName { get; set; } public string FirstMidName { get; set; } public DateTime EnrollmentDate { get; set; } } public class MyStudentContext : DbContext { public MyStudentContext() : base("UniContextDB") {} public virtual DbSet<Student> Students { get; set; } } public class Teacher { public int ID { get; set; } public string LastName { get; set; } public string FirstMidName { get; set; } public DateTime HireDate { get; set; } } public class MyTeacherContext : DbContext { public MyTeacherContext() : base("UniContextDB") {} public virtual DbSet<Teacher> Teachers { get; set; } }
正如您在上面的代码中所看到的,有两个模型叫做"学生"和"老师".每个都与特定的相应上下文类相关联,即,Student与MyStudentContext相关联,而Teacher与MyTeacherContext相关联.
这是迁移数据库中的更改的基本规则,当有同一项目中的多个Context类.
enable-migrations -ContextTypeName< DbContext-Name-with-Namespaces> MigrationsDirectory :< Migrations-Directory-Name>
Add-Migration -configuration< DbContext-Migrations-Configuration-Class-withNamespaces> < Migrations-Name>
Update-Database -configuration< DbContext-Migrations-Configuration-Class-withNamespaces> -Verbose
让我们通过在软件包管理器控制台中执行以下命令来启用MyStudentContext的迁移.
PM→ enable-migrations -ContextTypeName:EFCodeFirstDemo.MyStudentContext
一旦执行,我们将在迁移历史记录中添加模型,为此,我们必须在同一个控制台中触发add-migration命令.
PM→ add-migration -configuration EFCodeFirstDemo.Migrations.Configuration Initial
现在让我们在数据库的学生和教师表中添加一些数据.
static void Main(string[] args) { using (var context = new MyStudentContext()) { //// Create and save a new Students Console.WriteLine("Adding new students"); var student = new Student { FirstMidName = "Alain", LastName = "Bomer", EnrollmentDate = DateTime.Parse(DateTime.Today.ToString()) //Age = 24 }; context.Students.Add(student); var student1 = new Student { FirstMidName = "Mark", LastName = "Upston", EnrollmentDate = DateTime.Parse(DateTime.Today.ToString()) //Age = 30 }; context.Students.Add(student1); context.SaveChanges(); // Display all Students from the database var students = (from s in context.Students orderby s.FirstMidName select s).ToList<Student>(); Console.WriteLine("Retrieve all Students from the database:"); foreach (var stdnt in students) { string name = stdnt.FirstMidName + " " + stdnt.LastName; Console.WriteLine("ID: {0}, Name: {1}", stdnt.ID, name); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } using (var context = new MyTeacherContext()) { //// Create and save a new Teachers Console.WriteLine("Adding new teachers"); var student = new Teacher { FirstMidName = "Alain", LastName = "Bomer", HireDate = DateTime.Parse(DateTime.Today.ToString()) //Age = 24 }; context.Teachers.Add(student); var student1 = new Teacher { FirstMidName = "Mark", LastName = "Upston", HireDate = DateTime.Parse(DateTime.Today.ToString()) //Age = 30 }; context.Teachers.Add(student1); context.SaveChanges(); // Display all Teachers from the database var teachers = (from t in context.Teachers orderby t.FirstMidName select t).ToList<Teacher>(); Console.WriteLine("Retrieve all teachers from the database:"); foreach (var teacher in teachers) { string name = teacher.FirstMidName + " " + teacher.LastName; Console.WriteLine("ID: {0}, Name: {1}", teacher.ID, name); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } }
执行上述代码时,您会看到为两个不同的模型创建了两个不同的表,如图所示在下图中.
我们建议您执行上面的例子是逐步的,以便更好地理解.