EF面向数据的一软件应用程序的技术,从名称来看,Entity Framework,实体框架,为什么说是面向数据呢?这里涉及到了EF的操作原理。它可以直接通过建立的实体来映射到数据库中的每张表,同时通过数据库中的表来映射实体中的各个属性。那么这里就涉及到三个对象,数据库,实体和code,所以,EF在构建映射关系时,也包含三种不同的构建方式,DataBaseFirst,ModelFirst和CodeFirst。
关于前两种的构建方式,均属于图形化界面方式,根据提示一步一步往下走,很容易完成,第三种codeFirst要求编写代码,通过代码来生成数据库,然后再通过数据库来生成Model。在完成这些工作之前,我们需要把各个实体之间的关系理清楚,同时涉及到主外键关联和导航属性的编写等。
这里以视频中的例子来理一下思路。顾客与订单之间的关系为一对多。
先来编写实体类:
在编写前,首先要添加EntityFramework组件,并引入命名空间using System.ComponentModel.DataAnnotations ;支持主外键的声明。
public class Customer//顾客类 { [Key] public int Id { get; set; } public string CusName { get; set; } public ICollection<OrderInfo> order { set; get; }//这里反应出顾客与订单之间的一对多关系 }
public class OrderInfo //订单类 { [Key]//指定主键 public int Id { set; get; } public string Content { set; get; } public int customerId { set; get; }//外键 public Customer customer { set; get; }//导航属性,多对一关系 }
编写数据库上下文类:
using System.Data.Entity;
public class HotelDbContext:DbContext { public HotelDbContext () :base("name=ConnCodeFirst") //这里要和配置文件中的名字一致 { } //数据库中包含以下两张表的集合 public DbSet<Customer> Customer { set; get; } public DbSet<OrderInfo> OrderInfo { set; get; } }
执行客户端代码:
static void Main(string[] args) { HotelDbContext dbcontext = new HotelDbContext(); dbcontext.Database.CreateIfNotExists(); //创建一个数据库,如果不存在的话 }
配置文件:
<configuration> <connectionStrings> <add name="ConnCodeFirst" connectionString ="server=.;uid=sa;pwd=123456;database=CodeFirstDb" providerName="System.Data.SqlClient"/> </connectionStrings> </configuration>
通过以上步骤,就可以顺利创建一个数据库了,总的看来,EF中涉及到的就是这三种不同的构建方式,而在操作EF时,最终也离不开增删改查,而在EF中在对数据库进行操作时,说先要通过DbContext数据库上下文来对它进行操作,这里可以把它看成一个可供操作数据库的容器,在这个容器中对数据进行操作后,再将数据保存进数据库。
EF是在ADO.net基础上发展来的解决对象关系对应(ORM)的解决方案,ORM是一种思想,而EF是基于这种思想上的一种框架,它使得表和实体间具有映射关系。慢慢体会吧!