Entity Framework中有三种模式 Code First, Model First和Database First, Code First 是在EF4中新增的模式, 也跟NHibernate等ORM框架越来越接近了。
今天我们来做个 Code First 模式的 简单例子
Code First
为了支持以设计为中心的开发流程,EF4 还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你:
在不使用设计器或者定义一个 XML 映射文件的情况下进行开发。
·允许编写简单的模型对象POCO (plain old classes),而不需要基类。
·通过"约定优于配置",使得数据库持久层不需要任何的配置
·也可以覆盖"约定优于配置",通过流畅的 API 来完全定制持层的映射。
Code First是基于Entity Framework的新的开发模式,原先只有Database First和Model First两种。Code First顾名思义,就是先用C#/VB.NET的类定义好你的领域模型,然后用这些类映射到现有的数据库或者产生新的数据库结构。Code First同样支持通过Data Annotations或fluent API进行定制化配置
Database First
是最老也是应用得最广泛的一种设计方式。如上文提到过的那样,Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来创建模型。如果后期需求有所变更或者功能有很大变化的话,需要涉及到更改数据库所付出的代价将会很大,因为之前编写好的代码将不再适用于新的表,我们必需重构以更改代码中的逻辑以适应更改之后的表。
Model First
是创建ADO.NET实体对象以及它们之间的关系,然后再指定到数据库的映射。这个实体对象即为Model。
首先在GuGet程序包管理器中 下载安装 EF
1.新建表数据模型
using System;using System.Collections.Generic;using System.Linq;using System.Text; using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Data.Entity;namespace EFSample.Model{ [Table("T_Car")] public class Car { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int CarId { get; set; } [StringLength(50)] [Column("Brand")] public string Brand { get; set; } [StringLength(50)] [Column("CarModel")] public string CarModel { get; set; } [StringLength(50)] [Column("Color")] public string Color { get; set; } [Column("Price")] public decimal Price { get; set; } }}
2. 数据生成器
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.Entity;using System.Data.Entity.ModelConfiguration.Conventions;using EFSample.Model;namespace EFSample.DAL{ ////// DbContext 数据生成器 /// public class CarContext : DbContext { public CarContext() : base("MyConn") { } public DbSetCarSet { set; get; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove (); } }}
3.新建一个控制台应用程序 来操作数据
using System;using System.Collections.Generic;using System.Linq;using System.Text;using EFSample.DAL;using EFSample.Model;namespace EFSample.Demo{ class Program { static void Main(string[] args) { using (var db = new CarContext()) { //直接执行Sql语句 db.Database.ExecuteSqlCommand("delete from T_Car"); var car = new Car { Brand = "宝马", CarModel = "Z4", Color = "白色", Price = 200 }; //批量添加记录 db.CarSet.Add(car); //提交到db db.SaveChanges(); //查询 var query = db.CarSet.Where(c => c.Brand == "宝马").AsQueryable(); //输出Sql语句 Console.WriteLine(query.ToString()); ListorderEntities = query.ToList(); foreach (var order in orderEntities) { Console.WriteLine(String.Format("ID:{0}/CustomerName:{1}/Amount:{2}/ItemCount:{3}", order.CarId, order.Brand, order.CarModel, 0)); } } Console.WriteLine("ok!"); Console.Read(); } }}
4.配置文件App.config
结果展示