
- 實體框架教程
- 實體框架 - 首頁
- 實體框架 - 概述
- 實體框架 - 架構
- 實體框架 - 環境設定
- 實體框架 - 資料庫設定
- 實體框架 - 資料模型
- 實體框架 - DbContext
- 實體框架 - 型別
- 實體框架 - 關係
- 實體框架 - 生命週期
- 實體框架 - 程式碼優先方法
- 實體框架 - 模型優先方法
- 實體框架 - 資料庫優先方法
- 實體框架 - 開發方法
- 實體框架 - 資料庫操作
- 實體框架 - 併發
- 實體框架 - 事務
- 實體框架 - 檢視
- 實體框架 - 索引
- 實體框架 - 儲存過程
- 實體框架 - 斷開連線的實體
- 實體框架 - 表值函式
- 實體框架 - 原生 SQL
- 實體框架 - 列舉支援
- 實體框架 - 非同步查詢
- 實體框架 - 持久化
- 實體框架 - 投影查詢
- 實體框架 - 命令日誌
- 實體框架 - 命令攔截
- 實體框架 - 空間資料型別
- 實體框架 - 繼承
- 實體框架 - 遷移
- 實體框架 - 渴望載入
- 實體框架 - 延遲載入
- 實體框架 - 顯式載入
- 實體框架 - 驗證
- 實體框架 - 跟蹤更改
- 實體框架 - 彩色實體
- 實體框架 - 程式碼優先方法
- 實體框架 - 第一個示例
- 實體框架 - 資料註釋
- 實體框架 - Fluent API
- 實體框架 - 種子資料庫
- 實體框架 - 程式碼優先遷移
- 實體框架 - 多個 DbContext
- 實體框架 - 巢狀實體型別
- 實體框架資源
- 實體框架 - 快速指南
- 實體框架 - 有用資源
- 實體框架 - 討論
實體框架 - 多個 DbContext
在本章中,我們將學習如何在應用程式中存在多個 DbContext 類時將更改遷移到資料庫。
- 多個 DbContext 最初是在 Entity Framework 6.0 中引入的。
- 多個上下文類可能屬於單個數據庫或兩個不同的資料庫。
在我們的示例中,我們將為同一個資料庫定義兩個上下文類。在下面的程式碼中,有兩個用於學生和教師的 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”和“Teacher”的模型。每個模型都與一個特定的對應上下文類相關聯,即 Student 與 MyStudentContext 相關聯,Teacher 與 MyTeacherContext 相關聯。
以下是在同一個專案中有多個上下文類時,遷移資料庫更改的基本規則。
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
現在讓我們在資料庫中的 Students 和 Teachers 表中新增一些資料。
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(); } }
執行上述程式碼後,您將看到為兩個不同的模型建立了兩個不同的表,如下面的影像所示。

我們建議您逐步執行上述示例,以便更好地理解。