EF 6 DB-First系列--DB First模式的创建

DB First模式的创建

在这里,我们将以database-first的方法为现有数据库创建一个Entity Data Model(实体数据模型)(EDM),并了解基本的构建块。

Entity Framework使用EDM进行所有与数据库相关的操作。Entity Data Model是描述实体及其之间关系的模型。让我们使用Visual Studio(2012\2015\2017)和Entity Framework 6为学校数据库创建一个简单的EDM。

1、打开Visual Studio并创建一个控制台项目。

在这里插入图片描述

进入项目菜单->{项目名称}属性…-并确保项目的目标框架是. net framework 4.5,如下所示。

在这里插入图片描述

2、现在,通过右键单击解决方案资源管理器中的项目-> 添加-> 新建项目 来添加实体数据模型。这将打开“添加新项目”弹出框。在弹出窗口中,选择 ADO.NET实体数据模型,并为EDM提供适当的名称(在本例中为’School’),然后单击Add按钮。

在这里插入图片描述
3、Visual Studio中的实体数据模型向导(2012/2015/2017)打开,有四个选项可供选择:**EF Designer from database(来数据库的EF设计器)**用于数据库优先方法,**Empty EF Designer model(空EF设计器模型)**用于模型优先方法,Empty Code First model(空Code First模型)Code First from database(来自数据库的Code First)。我们在这里使用EF Designer from database,因此从数据库选项中选择EF设计器并单击Next。

在这里插入图片描述

4、在这一步中,您需要创建一个与现有数据库的连接。如果这是您第一次为数据库创建EDM,那么您需要通过单击new connection…按钮。

在这里插入图片描述
在Connection Properties弹出窗口中,提供服务器名( . 为本地数据库),并选择您的数据库名称并单击OK按钮。

在这里插入图片描述

这将在app.config文件中添加一个Entities的连接字符串。设置DB connection后单击Next。

在这里插入图片描述

5、在这一步中,您需要选择Entity Framework的版本。我们将在基本教程中使用Entity Framework 6.0,因此选择Entity Framework 6.0,然后单击下一步。

在这里插入图片描述

注意:如果你已经使用NuGet管理器安装了最新版本的Entity Framework,那么这一步的向导将不再出现。

6、下一步将显示数据库中的所有表、视图和存储过程(SP)。选择所需的表、视图和sp,保持默认复选框选中,然后单击Finish。如果您愿意,您可以更改模型命名空间名称。

在这里插入图片描述

注意:
Pluralize or singularize generated object names(确定所生成对象名称的单复数形式):如果数据库中的表名为复数,则将实体集名称变为复数。例如,如果SchoolDB数据库包含Students表名,则实体集将是单数Student;如果SchoolDB数据库包含Student表名,则实体集将是单数Students。类似地,如果表与其他表具有一对多或多对多的关系,则模型之间的关系将被多元化。例如,Student表与Course表具有多对多关系,因此Student实体集将为Course类型的集合导航属性具有复数名称Courses。

Include foreign key columns in the model(在模型中包含外键列):包括显式表示外键的外键属性。例如,Student表与Standard表有一对多的关系。为了在模型中表示这一点,Student实体集包含了一个带有Standard引用导航属性的StandardId属性。如果该复选框未选中,那么它将只包括Standard引用导航属性,而不包括StandardId。

Import selected stored procedures and functions into entity model(将所选存储过程和函数导入到实体模型中):自动为存储过程和函数创建“函数导入”。你不需要像Entity Framework 6.0之前那样手动导入函数。

7、点击完成后,一个School.edmx文件将添加到您的项目中。

双击School.edmx打开EDM设计器。这将显示所选表的所有实体以及它们之间的关系,如下所示:

在这里插入图片描述

EDM在App.config文件中添加了提供程序和连接字符串设置,如下所示:

<?xml version="1.0"?><configuration>
  <configSections>
	<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
   </configSections>
   <startup>
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
   </startup>
   <entityFramework>
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
     <providers>
       <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
     </providers> 
    </entityFramework>
   <connectionStrings> 
    <add name="SchoolDBEntities" connectionString="metadata=res://*/SchoolDB.csdl|res://*/SchoolDB.ssdl|res://*/SchoolDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=SchoolDB;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
   </connectionStrings>
  </configuration>

因此,您可以为现有数据库创建一个实体数据模型文件(.edmx)。

您可以在XML视图中打开EDM设计器,在XML视图中可以看到EDM的所有三个部分:概念模式(CSDL)、存储模式(SSDL)和映射模式(MSL)。

右击School.edmx ->点击“打开…,这将打开一个弹出窗口。

在这里插入图片描述

在弹出窗口中选择“XML(文本)编辑器”。

在这里插入图片描述

Visual Studio不能同时在Design视图和XML格式中显示模型,因此您将看到一条消息,询问是否可以关闭模型的Design视图,单击Yes。这将打开XML格式视图。通过切换所有概要,您可以看到以下XML视图,如下所示。

在这里插入图片描述

您可以在这里看到SSDL内容、CSDL内容和C-S映射内容。如果展开SSDL和CSDL,每个模式节点下都有一些公共XML节点。您不需要编辑xml数据,因为这可以在Model Browser中更容易地完成。

现在,让我们检查生成的EDM (School.edmx)的所有构建块,如上图所示。

Entity-Table Mapping

EDM中的每个实体都映射到数据库表。您可以通过右键单击EDM设计器中的任何实体->选择表映射来检查实体-表映射。此外,如果您从设计器更改实体的任何属性名称,则表映射将自动反映该更改。

在这里插入图片描述

Context & Entity Classes

每个实体数据模型为每个数据库表生成一个上下文和一个实体类。在解决方案资源管理器中展开.edmx文件并打开两个重要文件.Context.tt和.tt,如下图所示:

在这里插入图片描述

School.Context.tt:每当您更改实体数据模型(.edmx文件)时,这个T4模板文件都会生成上下文类。展开School.Context.tt可以看到上下文类文件。上下文类位于.context.cs文件中。默认的上下文类名称是Entities。例如,SchoolDB的上下文类名是SchoolDBEntities,派生自DBContext类。

在这里插入图片描述

School.tt:School.tt是一个T4模板文件,它为每个DB表生成实体类。实体类是POCO(普通CLR对象)类。下面的代码片段显示了Student实体。

public partial class Student
{
    public Student()
    {
        this.Courses = new HashSet<Course>();
    }
    
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public Nullable<int> StandardId { get; set; }
    public byte[] RowVersion { get; set; }
    
    public virtual Standard Standard { get; set; }
    public virtual StudentAddress StudentAddress { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

参考

https://www.entityframeworktutorial.net/
https://msdn.microsoft.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值