【EF映射】EF入门(一)

   EF理解

   EF(实体框架)是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM (O/R Mapping) 框架。ORM(对象关系映射框架):指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。

    也就是说业务实体在内存中表现为对象,在数据库中表现为数据,内存中的对象之间,存在关联和继承关系,而在数据库中,关系数据无法直接表达这些关系。而对象-关系映射(ORM)就是解决这一问题的。ORM作为一个中间件,实现程序对象到关系数据库的数据映射。那么,EF也就是一种实现数据库和程序中的实体相互映射的一种工具。

ORM理解

  一直在说ORM,那ORM是什么,下面就介绍一下ORM:

【EF映射】EF入门(一)_第1张图片

     ORM不是产品,是框架的总称,面向对象的程序设计语言到关系数据库的映射。也可以理解成ORM框架帮助我们跟踪实体的变化,并将实体的变化翻译成sql脚本,并执行到数据中去,也就是将实体的变化映射到了表的变化。转化的过程如下图:

【EF映射】EF入门(一)_第2张图片

对数据库的增删改查

   在打框架的时候我们知道了怎么去建立一个实体模型,过程不再赘述,对数据库的操作有两种方式,一种是CodeFirst,另一种是ModelFirst。两者的区别在与建立实体模型是前者选择从数据库中生成,后者选择空模板。

【EF映射】EF入门(一)_第3张图片

CoreFirst:

private void Form1_Load(object sender, EventArgs e)
{
    // 实现EF第一种方式:CodeFirst:代码先行机制
    /************************ 增加数据***********************/
    //01.创建EF上下文实例
    EFFirstEntities efFirst = new EFFirstEntities();
    #region 新增数据
    ////02.构造出一个实体
    //Student stu = new Student();
    //stu.Name = "张三";
    ////03.将实体对象添加到实体集合中
    //efFirst.Student.AddObject(stu);
    ////04.最后要告诉EM帮我去将数据保存到数据库
    //efFirst.SaveChanges();
    #endregion
   /*************************修改数据************************/
   //02.构造出你要修改的实体
    #region 修改数据
    //Student stu = new Student();
    //stu.Name = "李四";
    //stu.ID = 4;
    ////03.将当前实体用EF进行跟踪
    //efFirst.Student.Attach(stu);
    ////04.将状态设置为Modified
    //efFirst.ObjectStateManager.ChangeObjectState(stu, EntityState.Modified);
    ////05.保存
    //efFirst.SaveChanges();
    #endregion  

    /***********************删除数据*************************/
    #region 删除
    //Student stu = new Student();
    //stu.ID = 4;
    ////03.也是要跟踪当前的实体对象
    //efFirst.Student.Attach(stu);
    //efFirst.ObjectStateManager.ChangeObjectState(stu, EntityState.Deleted);
    //efFirst.SaveChanges();
    #endregion

    /***************************查询数据*************/
    //var 语法塘技术
    //foreach (var item in efFirst.Student)
    //{
    //    string result = string.Format("ID={0},Name={1}", item.ID, item.Name);
    //    MessageBox.Show(result);
    //}
    /****************** ***********通过linq方式查询***********/
   //EF有延迟加载机制  select * from student where 1=1
    //所谓延迟加载机制,当你真正需要数据的时候,EF才帮我们加载
    var list = from c in efFirst.Student
               where c.ID > 1
               select c;
    foreach (var item in list)
    {
        MessageBox.Show(item.Name);
    } 
ModelFirst:

/*******************************添加************************************************/
Customer customer = new Customer() { CName = "李小龙", CRemark = "功夫影星" };
modelFirst.Customer.AddObject(customer);
Order order1 = new Order() { OrderContent = "双节棍", Customer = customer, OrderDate = DateTime.Now };
modelFirst.Order.AddObject(order1);

Order order2 = new Order() { OrderContent = "布棍", Customer = customer, OrderDate = DateTime.Now };
modelFirst.Order.AddObject(order2);
modelFirst.SaveChanges();
/*************************************查询*************************************/
var temp = from c in modelFirst.Customer
           where c.Order.Count >= 2
           select c;
foreach (var item in temp)
{
    foreach (var o in item.Order)
    {
        MessageBox.Show(o.OrderContent);
    }
}
/*********************************修改********************************************/
Customer cust = new Customer(){CID = 1,CName = "小李",CRemark = "英雄"};
modelFirst.Customer.Attach(cust);
modelFirst.ObjectStateManager.ChangeObjectState(cust, EntityState.Modified);
modelFirst.SaveChanges();
/*********************************删除***********************************************/
var temp = from c in modelFirst.Order
           where c.Customer.CID == 1 
           select c;
foreach (var item in temp)
{
    modelFirst.Order.DeleteObject(item);
}
Customer cust = new Customer() 
{
    CID=1
};

modelFirst.Customer.Attach(cust);
modelFirst.ObjectStateManager.ChangeObjectState(cust, EntityState.Deleted);
modelFirst.SaveChanges(); 
【总结】

    在开始接触新知识的时候,我们应该现要弄清楚是什么,为什么用,这样我们才能更好的发挥它的作用。关于EF知识的理解还有很多,下一篇会尽快出现...

你可能感兴趣的:(项目)