一个业务领域由各个实体和各个相互关联且有格子的属性和行为的实体组成,每一个实体都有其状态和验证规则须要维护,Entity Framework (后面简称EF)实体框架设计的出现是为了容许开发人员着重关注业务领域,开发人员就实体来建模。它产生的目的是为了解决企业快速开发和迭代出市场所须要的系统或者软件。下面咱们介绍Entity Framework 中的三种领域建模方式。数据库
Code First 能够经过C#或者VB.NET 来描述这些模型,而后经过类来建立数据库。这些类简称POJO(Plian Old CRL Object)。POCO来源于Java的POJO,其中J就是Java,POJO是由马丁·富勒(Martin Fowler) 和其余人一同提出来的概念以反对在20世纪90年代早期受欢迎的JavaBeans。POJO概念提出的主要目标是显示域能够被成功建模,而不会带来与执行环境相关的复杂表(JavaBeans在早期版本中带来了不少),同时执行环境与域建模彻底无关。POJO不能再.NET中使用,所以有了具有POJO相同语义 的POCO。这里的C指的是(Common Language Runtime,CLR通用语言运行时)中建立的一个简单对象。EF 4.0以前生成的每一个类都是从EntityObject基类继承而来的,所以带来了许多特定于EF的复杂性。而从EF 4.0开始,框架引入了POCO数据模型,容许使用不从EntityObject继承的类。使用Code First 模型能够彻底以面向对象的方式来工做而没必要担忧数据库的结构,这种抽象使咱们可以建立更加灵活的应用程序。其优势以下:数据结构
1)、这是最受欢迎的领域建模方式,能够容许咱们建立一个更富有的逻辑、更灵活的应用程序;架构
2)、由于没有自动生成的代码是难以修改的,因此它提供了咱们对代码的 彻底控制;框架
3)、经过这种方法咱们只须要定义映射,其他一切交给EF来处理,包括建立数据库表以及表与表之间的关系;ide
4)、这种方式能够通俗易懂的成为代码定义数据库,因此不推荐对数据库的手动修改;测试
5)、咱们可使用它来映射表结构到一个已存在的数据库。spa
栗子:VS2017 --->新建一个MVC项目--->右击项目引用--->管理NeGet程序包--->浏览搜索EntityFramework--->安装设计
而后在Models中添加两个类 Student和Class 表示学生表与班级表3d
创建一个数据库上下文类 配置数据库连接字符串 在Home控制器里面测试看看 code
<connectionStrings> <add name="SqlConn" connectionString="Data Source=地址;Initial Catalog=BaseTestEF;User ID=sa; Password=密码;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> </connectionStrings
using System.Linq; using System.Web; namespace EF3Class.Models { public class WYDB :DbContext { public WYDB() : base("SqlConn") { //默认的初始化器。这种初始化器在第一次运行程序时会建立数据库,再次运行不会再建立新的数据库。可是若是咱们改变了领域类,运行程序时会抛出一个异常 //Database.SetInitializer(new CreateDatabaseIfNotExists<DbContextWY>()); //若是领域类发生了改变,删除之前的数据库,而后重建一个新的。采用这种初始化器不用再担忧领域类改变影响数据库架构的问题。 //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextWY>()); //每次运行程序都会删除之前的数据库,重建新的数据库。若是在开发过程当中每次都想使用最新的数据库,那么能够采用这种初始化器。 Database.SetInitializer(new DropCreateDatabaseAlways<WYDB>()); } public DbSet<Student> Student { get; set; } public DbSet<Class> Class { get; set; } } }
顺序别反了,反了想知道啥效果本身测试一下。
public ActionResult Index() { WYDB db = new WYDB(); var c = db.Class.ToList(); var s = db.Student.ToList(); return View(); }
运行起来看数据库里面
它就生成了对应的数据库,是复数的形式,也能够本身代码配置命名。后面几章会说。
Model First 容许咱们使用实体设计器在空模型(扩展名.edmx)中建模型实体及其关系个继承层次结构,而后建立数据库。在Model First 方法中,建立实体模型是必须选择“空模型”,而不是从数据库生成。其优缺点以下:
1)、若是你喜欢可视化应用程序中的数据结构,或者不喜欢编写SQL,那么它将被你喜欢,由于它会自动生成;
2)、在此方法中,咱们没法控制实体和数据库,由于自动生成的代码难以修改,因此这种建模方式已经愈来愈不被开发者使用。但对于小型简单的项目它行之有效;
3)、要在POCO是体重添加额外的功能,咱们不得不修改T4模板或者使用部分类来完成;
4)、数据库模型的更改不是最佳选择,是由模板定义了数据库。
栗子在Models文件夹上 右键-->新建-->新建项-->数据-->ADO.NET实体数据模型,选择空模型,个人命名默认Model1没改而后点击完成
右击新增长-->实体
而后添加变量
数据类型本身设置F4,右击表添加关联
而后右击空白根据模型生成数据库就用刚刚的SqlConn连接,在连接字符包含敏感字符选上 后面会生成一个SQL文件 右击执行(Ececute)填链接字符串。链接就能够了
Database First 使咱们可以从现有数据库(Sql Server 、Oracle、DB2等)建立模型,此方法减小了自动生成代码所编写的代码量,同时也限制了使用生成代码的结构。优缺点以下:
1)、若是咱们已有BDA设计的数据库来单独开发或现有已经存在的数据库,那么它将会做为首选;
2)、经过EDM向导为咱们建立实体、关系和继承层次结构,修改映射以后还能够生成POCO实体;
3)、要在POCO实体中添加额外的功能,必须经过T4修改模板或者使用部分类;
4)、数据库的手动更改变为可能,由于数据库定义了领域模型 ,若是要修改数据库表结构,只须要从数据库更新实体模型便可。
栗子在Models文件夹上 右键-->新建-->新建项-->数据-->ADO.NET实体数据模型,选择来自数据库的ef设计器,个人命名默认。选择表,视图,存储过程的 看本身须要。能够看到生成出来的直接替换了刚刚Model First