首页 > 代码库 > EF学习总结——CodeFirst

EF学习总结——CodeFirst


           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是基于这种思想上的一种框架,它使得表和实体间具有映射关系。慢慢体会吧!


EF学习总结——CodeFirst