📜  Entity Framework-模型优先方法

📅  最后修改于: 2020-11-21 07:17:48             🧑  作者: Mango


在本章中,让我们学习如何使用称为“模型优先”的工作流在设计器中创建实体数据模型。

  • 当您开始一个甚至不存在数据库的新项目时,Model First非常有用。

  • 该模型存储在EDMX文件中,可以在Entity Framework Designer中查看和编辑。

  • 在“模型首先”中,您可以在Entity Framework设计器中定义模型,然后生成SQL,SQL将创建与模型匹配的数据库架构,然后执行SQL在数据库中创建架构。

  • 您在应用程序中与之交互的类是从EDMX文件自动生成的。

以下是使用“模型优先”方法创建新控制台项目的简单示例。

步骤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-将关系的一端指向学生,其一端为多个,另一端指向注册,其端为多个。

一的多重性

步骤17-这意味着一个学生拥有多个注册并且该注册属于一个学生。

步骤18-确保选中将外键属性添加到“发布”实体框,然后单击确定。

步骤19-同样,在课程和注册之间添加一个关联。

课程和报名

步骤20-在实体之间添加关联之后,您的数据模型将如下图所示。

资料模型

现在,我们有了一个简单的模型,可以从中生成数据库并用于读取和写入数据。让我们继续生成数据库。

步骤1-右键单击设计图面,然后选择“从模型生成数据库…”

来自模型的数据库

步骤2-您可以选择现有数据库或通过单击“新建连接”来创建新连接…

生成数据库

步骤3-要创建新的数据库,请单击“新建连接…”。

连接属性

步骤4-输入服务器名称和数据库名称。

服务器和数据库

步骤5-单击下一步。

服务器和数据库1

步骤6-单击完成。这将在项目中添加* .edmx.sql文件。您可以通过打开.sql文件,然后右键单击并选择执行来在Visual Studio中执行DDL脚本。

DDL脚本

步骤7-将显示以下对话框以连接到数据库。

连接到数据库

步骤8-成功执行后,您将看到以下消息。

成功执行

步骤9-转到服务器资源管理器,您将看到该数据库是使用指定的三个表创建的。

数据库创建

接下来,我们需要交换模型以生成使用DbContext API的代码。

步骤1-右键单击EF Designer中模型的空白处,然后选择添加代码生成项…

EF设计师

您将看到以下“添加新项”对话框打开。

对话框打开

步骤2-在中间窗格中选择EF 6.x DbContext Generator,然后在“名称”字段中输入ModelFirstDemoModel。

步骤3-您将在解决方案资源管理器中看到生成了ModelFirstDemoModel.Context.tt和ModelFirstDemoModel.tt模板。

模板生成

ModelFirstDemoModel.Context生成DbCcontext和对象集,您可以将其返回并用于查询(例如,上下文,学生和课程等)。

另一个模板处理所有类型的Student,Course等。下面是Student类,它是从实体模型自动生成的。

CSharp代码

以下是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...

我们建议您逐步执行上述示例,以更好地理解。