在本章中,让我们学习如何使用称为模型优先的工作流在设计器中创建实体数据模型.
当您开始一个数据库尚不存在的新项目时,Model First非常适合.
存储模型在EDMX文件中,可以在Entity Framework Designer中查看和编辑.
在Model First中,您在Entity Framework设计器中定义模型然后生成SQL ,它将创建与您的模型匹配的数据库模式,然后执行SQL以在数据库中创建模式.
您在交互中的类应用程序是从EDMX文件自动生成的.
以下是使用Model First方法创建新控制台项目的简单示例.
第1步 : 打开Visual Studio并选择File→New→Project
第2步 : 从左窗格中选择已安装→模板→Visual C#→Windows,然后在中间窗格中选择控制台应用程序.
步骤3 : 在名称字段中输入EFModelFirstDemo.
步骤4 : 要创建模型,首先右键单击解决方案资源管理器中的控制台项目,然后选择添加→新项... ...
将打开以下对话框.
第5步 : 从中间窗格中选择ADO.NET实体数据模型,并在名称字段中输入名称ModelFirstDemoDB.
步骤6 : 单击"添加"按钮,将启动"实体数据模型向导"对话框.
第7步 : 选择Empty EF Designer model并单击Next按钮.实体框架设计器将打开一个空白模型.现在我们可以开始向模型添加实体,属性和关联.
步骤8 : 右键单击设计图面,然后选择"属性".在"属性"窗口中,将"实体容器名称"更改为"ModelFirstDemoDBContext".
第9步 : 右键单击设计图面并选择Add New→Entity ...
将打开添加实体对话框,如下图所示.
第10步 : 输入Student作为实体名称,输入Student Id作为属性名称,然后单击Ok.
步骤11 : 右键单击设计图面上的新实体,然后选择Add New→Scalar Property,输入Name作为属性的名称.
第12步 : 输入FirstName,然后添加另外两个标量属性,例如LastName和EnrollmentDate.
步骤13 : 按照上面提到的所有步骤再添加两个实体课程和注册,并添加一些Scalar属性,如以下步骤所示.
步骤14 : 我们在可视设计器中有三个实体,让我们在它们之间添加一些关联或关系.
步骤15 : 右键单击设计图面并选择Add New→Association ...
步骤16 : 将关系的一端指向Student,其多重性为1,另一端指向Enrollment,其复数为多次.
步骤17 : 这意味着学生有多个注册,并且注册属于一个学生.
步骤18 : 确保选中将"添加外键"属性设置为"发布"实体框,然后单击"确定".
步骤19 : 同样,在课程和注册之间再添加一个关联.
第20步 : 在添加实体之间的关联后,您的数据模型将如下所示.
我们现在有一个简单的模型,我们可以从中生成数据库并用于读取和写入数据.让我们继续生成数据库.
第1步 : 右键单击设计图面并选择从模型中生成数据库...
第2步 : 您可以通过单击New Connection ...来选择现有数据库或创建新连接.
第3步 : 要创建新数据库,请单击"新建连接..."
第4步 : 输入服务器名称和数据库名称.
第5步 : 单击"下一步".
步骤6 : 单击完成.这将在项目中添加* .edmx.sql文件.您可以通过打开.sql文件在Visual Studio中执行DDL脚本,然后右键单击并选择执行.
第7步 : 将显示以下对话框以连接到数据库.
第8步 : 成功执行后,您将看到以下消息.
第9步 : 转到服务器资源管理器,您将看到数据库是使用指定的三个表创建的.
接下来,我们需要交换模型以生成使用DbContext API的代码.
第1步 &减去;在EF Designer中右键单击模型的空白处,然后选择添加代码生成项...
您将看到以下"添加新项"对话框打开.
第2步 : 在中间窗格中选择EF 6.x DbContext Generator,然后在名称字段中输入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...
我们建议您逐步执行上述示例为了更好地理解.