创建实体数据模型:

本文将带你创建实体数据模型(EDM)SchoolDB数据库和理解基础建设模块。

实体数据模型(EDM)是用于描述实体之间关系的一种模型,以下将使用Visual Studio 2012 和 EF6创建SchoolDB数据库。

1.打开Visual Studio 2012并创建一个Console项目

项目->属性,确保target framework 为 .NET Framework 4.5。

2.增加EDM文件,右键项目 -> 添加 选中ADO.NET Entity Data 并命名为'School'

3.随后会出现EDM向导,有四个选项:EF Designer from database (数据库优先功能),Empty EF Designer model(模型优先功能),Empty Code First model 和 Code First from database(代码优先功能)。在本基础教程中暂时只关注数据库优先功能,所以选择EF Designer from database 选项,并且点击下一步。

4.你可以选择已经存在的数据库连接或者选择新建一个连接。我们选择已经存在的数据库连接SchoolDB数据库。这会将对应的连接字符串加入app.config文件,点击下一步。

5.这一步我们需要选择EF的版本,这里我们选择EF6.0

注意:如果你已经安装了EF的最新环境,这一步将不会出现。

6.这一步将显示SchoolDB数据库的所有表,视图和存储过程,选择你想要建模的表,视图,存储过程。并且如果需要的话,可以修改命名空间。

注意:

Pluralize or singularize generated object names 选项 表示所创建的对象属性会注意单复数形式。例如,如果SchoolDB数据库中有一个表名为Students的表,它创建出来的实体集合(如DBSet<T>)中的泛型参数(T)会以单数形式创建。又例如表间关系存在一对多或多对多关系的,如Student与Course之间的多对多关系,在Student实体对象中将存在一个复数形式的属性名“Courses”的集合对象。

第二个选项,Include foreign key columns in the model,将外键包含在模型中。例如Standard表和Student表存在一对多的关系,所以代表多个Student关联一个Standard。在实体模型中Student将包含StandardId 这个标量属性和Standard 这个导航属性,如果没有选中该项,则仅包含Standard 这个导航属性,不包含StandardId 这个标量属性。

第三个选项,Import selected stored procedures and functions into entity model,自动创建存储过程和函数,这个选项通常是必须要的。

7.当点击“Finish”键后,一个名为“School.edmx”的文件将出现在你的项目中。双击该文件将打开EDM设计器,它会显示所有你刚刚选择的表以及他们之间的关系。

EDM也会在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>

至此,你已经通过已有的数据库创建出一个简单的EDM模型了。

接下来我们将看看EDM (School.edmx)为我们创建了一些什么文件。

实体表映射:

每一个实体对象都被映射到对应的数据表中,你可以右键点击对应的实体对象并查看映射关系。当然,如果你在EDM设计器中修改了实体对象的属性名字,表映射也会自动应用该变化。

上下文及实体类:

每一个实体对象模型都会创建一个上下文类(Context Class)还有若干个你选中的表所对应的实体类在EDM中,展开School.edmx变能看见。

School.Context.tt:

这是T4模板文件产生出来的上下文类。你可以展开.edmx文件开到它,其中会创建默认名为{数据库名} + "Entities"的类。该类继承DBContext类(该类在EF在定义,EF5.0前为ObjectContext类)

School.tt:

这是T4模板产生出来的实体对象类,下面代码片段显示了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; }
}

EDM Designer:

EDM设计器代表你的概念模型,它代表实体对象和他们之间的关系。起初,它看起来完全跟你的数据库表结构一样,但你可以从设计器中添加,合并和删除一些你的应用程序不需要的字段。你甚至可以在这个模型中添加一个来自不同数据库表的新对象到上下文菜单中,像上面一样。记住无论做了什么改动都应该将它映射至存储模型中。所以你做改动时必须小心。

你可以通过XML的方式打开EDM设计器,这样你将看到三部分,概念模式 (CSDL), 存储模式 (SSDL) 和 映射表 (MSL) ,这三部分都在XML中。

右键点击School.edmx,选择打开方式。

选择“XML (text) Editor”

Visual Studio 不能同时打开模型设计外观和XML编辑器,所以你会看到一个让你关闭模型设计外观的窗口。点击Yes将看到XML编辑器形式,然后你将看到以下界面。

你能看到SSDL, CSDL 和 C-S mapping 的内容,你可以展开这些内容进行浏览。你并不需要直接编写XML数据,因为你可以直接在模型中浏览编辑。

Entity Framework 教程——创建实体数据模型的更多相关文章

  1. Entity Framework入门教程:创建实体数据模型

    下图为一个已经创建好的数据库表关系 实体数据模型的创建过程 在Visual Studio项目中,右键程序集菜单,选择[添加]->[新建项],在[添加新项窗口]中选择[ADO.NET实体数据模型] ...

  2. 创建实体数据模型【Create Entity Data Model】(EF基础系列5)

    现在我要来为上面一节末尾给出的数据库(SchoolDB)创建实体数据模型: SchoolDB数据库的脚本我已经写好了,如下: USE master GO IF EXISTS(SELECT * FROM ...

  3. Entity Framework 教程——Entity Framework中的实体类型

    Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...

  4. Entity Framework 教程——DBContext

    DBContext: 在之前的章节<创建实体数据模型>中,EDM为我们创建了SchoolDBEntities 类,它派生子System.Data.Entity.DbContext这个类,这 ...

  5. Entity Framework教程翻译 ---- 系列教程

    Entity Framework教程(第二版) (翻译)Entity Framework技巧系列之十四 - Tip 56 (翻译)Entity Framework技巧系列之十三 - Tip 51 - ...

  6. Entity Framework教程及文章传送门

    Entity Framework视频教程http://www.iqiyi.com/playlist296844502.html Model-Code First做法講解與教學 (ASP.net MVC ...

  7. EntityFramework 学习 一 创建实体数据模型 Create Entity Data Model

    1.用vs2012创建控制台程序 2.设置项目的.net 版本 3.创建Ado.net实体数据模型 3.打开实体数据模型向导Entity Framework有四种模型选择 来自数据库的EF设计器(Da ...

  8. Entity Framework教程(第二版)

    源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...

  9. Model First:创建实体数据模型(ADO.NET 实体数据模型)

    Microsoft Entity Framework是一个对象关系映射工具(Object Relational Mapping ,O/RM)工具.它可以让你从一个数据库自动地生成数据接入层.实体框架免 ...

随机推荐

  1. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  2. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. html5 canvas常用api总结(二)--绘图API

    canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...

  4. Mysql存储引擎比较

    Mysql作为一个开源的免费数据库,在平时项目当中会经常使用到,而在项目当中我们的着重点一般在设计使用数据库上而非mysql本身上,所以在提到mysql的存储引擎时,一般都不曾知道,这里经过网上相关文 ...

  5. 设计模式C#合集--单例模式

    单例模式 代码: 第一种: private static Singleton singleton = null; private Singleton() { } public static Singl ...

  6. 分页插件--根据Bootstrap Paginator改写的js插件

    刚刚出来实习,之前实习的公司有一个分页插件,和后端的数据字典约定好了的,基本上是看不到内部是怎么实现的,新公司是做WPF的,好像对于ASP.NET的东西不多,导师扔了一个小系统给我和另一个同事,指了两 ...

  7. 【centos7常用技巧】RPM打包

    一.RPM打包的目的 1.当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可. 2.当需要在目标机中安装多个软件或者增加多个文件时,可以将 ...

  8. 修改MySQL默认字符集编码

    好记心不如烂笔头,很多东西当时没记下来,过了就忘了,下次用到时又得浪费好多时间才能解决.今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了. 查看MyS ...

  9. 学习笔记 :DrawText

    最近在做一个TStringGrid的自绘处理,在画文字处理上遇到了高度的计算问题.后来经过一段时间还是找到了一些方法: 1.使用TLabel 这个方法是有点绕路的,方法倒是简单,就是使用AutoSiz ...

  10. ES6+ 现在就用系列(二):let 命令

    系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...