实体框架 – 模型优先方法
实体框架 – 模型优先方法
在本章中,让我们学习如何使用称为模型优先的工作流在设计器中创建实体数据模型。
-
当您开始一个数据库还不存在的新项目时,Model First 非常适合。
-
该模型存储在 EDMX 文件中,可以在实体框架设计器中查看和编辑。
-
在 Model First 中,您在实体框架设计器中定义您的模型,然后生成 SQL,这将创建数据库架构以匹配您的模型,然后您执行 SQL 以在您的数据库中创建架构。
-
您在应用程序中与之交互的类是从 EDMX 文件自动生成的。
以下是使用 Model First 方法创建新控制台项目的简单示例。
步骤 1 – 打开 Visual Studio 并选择文件 → 新建 → 项目
步骤 2 – 从左窗格中选择已安装 → 模板 → Visual C# → Windows,然后在中间窗格中,选择控制台应用程序。
步骤 3 – 在名称字段中输入 EFModelFirstDemo。
第 4 步– 要创建模型,首先在解决方案资源管理器中右键单击您的控制台项目,然后选择添加 → 新项目…
将打开以下对话框。
步骤 5 – 从中间窗格中选择 ADO.NET 实体数据模型,然后在名称字段中输入名称 ModelFirstDemoDB。
步骤 6 – 单击添加按钮,这将启动实体数据模型向导对话框。
步骤 7 – 选择 Empty EF Designer 模型并单击下一步按钮。实体框架设计器打开时带有一个空白模型。现在我们可以开始向模型添加实体、属性和关联。
步骤 8 – 右键单击设计图面并选择属性。在“属性”窗口中,将实体容器名称更改为 ModelFirstDemoDBContext。
步骤 9 – 右键单击设计图面并选择添加新 → 实体…
添加实体对话框将打开,如下图所示。
步骤 10 – 输入 Student 作为实体名称和 Student Id 作为属性名称,然后单击确定。
步骤 11 – 右键单击设计图面上的新实体并选择添加新 → 标量属性,输入名称作为属性名称。
步骤 12 – 输入 FirstName,然后添加另外两个标量属性,例如 LastName 和 EnrollmentDate。
步骤 13 – 按照上述所有步骤添加另外两个实体课程和注册,并添加一些标量属性,如以下步骤所示。
第 14 步– 我们在 Visual Designer 中有三个实体,让我们在它们之间添加一些关联或关系。
步骤 15 – 右键单击设计图面并选择添加新 → 关联…
第 16 步– 使关系的一端指向具有多重性的 Student,而另一端指向具有多重性的 Enrollment。
步骤 17 – 这意味着一个学生有很多注册并且注册属于一个学生。
步骤 18 – 确保选中将外键属性添加到“发布”实体框并单击确定。
第 19 步– 同样,在“课程”和“注册”之间再添加一个关联。
步骤 20 – 添加实体之间的关联后,您的数据模型将如下所示。
我们现在有一个简单的模型,我们可以从中生成一个数据库并用于读取和写入数据。让我们继续并生成数据库。
步骤 1 – 右键单击设计图面并选择从模型生成数据库…
步骤 2 – 您可以选择现有数据库或通过单击新建连接来创建新连接…
步骤 3 – 要创建新数据库,请单击新连接…
步骤 4 – 输入服务器名称和数据库名称。
步骤 5 – 单击下一步。
步骤 6 – 单击完成。这将在项目中添加 *.edmx.sql 文件。您可以通过打开 .sql 文件在 Visual Studio 中执行 DDL 脚本,然后右键单击并选择“执行”。
步骤 7 – 将显示以下对话框以连接到数据库。
步骤 8 – 成功执行后,您将看到以下消息。
步骤 9 – 转到服务器资源管理器,您将看到使用指定的三个表创建数据库。
接下来,我们需要交换模型以生成使用 DbContext API 的代码。
步骤 1 – 在 EF 设计器中右键单击模型的空白处,然后选择添加代码生成项…
您将看到以下添加新项目对话框打开。
第 2 步– 在中间窗格中选择 EF 6.x DbContext Generator,然后在 Name 字段中输入 ModelFirstDemoModel。
第 3 步– 您将在解决方案资源管理器中看到生成了 ModelFirstDemoModel.Context.tt 和 ModelFirstDemoModel.tt 模板。
ModelFirstDemoModel.Context 生成 DbCcontext 和您可以返回并用于查询的对象集,例如上下文、学生和课程等。
另一个模板处理所有类型的学生、课程等。以下是学生类,它是从实体模型自动生成的。
以下是 C# 代码,其中一些数据被输入并从数据库中检索。
using System; using System.Linq; namespace EFModelFirstDemo { class Program { static void Main(string[] args) { using (var db = new ModelFirstDemoDBContext()) { // Create and save a new Student Console.Write("Enter a name for a new Student: "); var firstName = Console.ReadLine(); var student = new Student { StudentID = 1, FirstName = firstName }; db.Students.Add(student); db.SaveChanges(); var query = from b in db.Students orderby b.FirstName select b; Console.WriteLine("All student in the database:"); foreach (var item in query) { Console.WriteLine(item.FirstName); } Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } } }
执行上述代码时,您将收到以下输出 –
Enter a name for a new Student: Ali Khan All student in the database: Ali Khan Press any key to exit...
我们建议您逐步执行上述示例,以便更好地理解。