1. EF是Entity Framework的缩写,全称是(ADO.Net Entity Framework),是以ADO.Net为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpace.

2. ADO.Net:是在.Net平台下给我们提供了一组操作数据库的类库(API).

3. ASP.Net:是在.Net平台下给我们提供了一种开发Web应用程序的框架。

4.什么是ORM?【是一种思想】

广义上讲:ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。

狭义上讲:ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要了解任何关系型数据库存储数据的实现细节。

简单的说,ORM是一种思想,而Entity Framework 是实现这种思想的框架。

通过下图来理解ORM:

5. EF的表必须要有主键,有了主键,才能够对表进行操作。

6.模型与数据库之间的映射的三种体现形式:

database first 数据库先行【即先创建数据库,通过数据库进行映射】

Model first 模型先行【即先建立模型,再将模型映射到数据库中,自动创建数据库。】

Code first 没有模型,没有数据库,只有代码

7. 我们先来谈谈第一种方式:【database first】

第一步:首先创建一个控制台应用程序:

第二步:添加"ADO.NET 实体数据模型"程序,如下图:

第三步:点击添加,选择"来自数据库中的EF设计器",然后点击下一步

第四步:建立新的连接,选中你要使用的数据库,如下图步骤:

第五步:选中你要映射的表,点击完成即可。

如下是通过这种方式对数据库进行修改、删除、增加的:

class Program
{
static void Main(string[] args)
{
#region 添加一条用户数据
////第一步:创建访问数据库的统一入口。创建EF的上下文。
//CCDBEntities dbContext=new CCDBEntities(); ////第二步:操作实体
//MyStudent myStudent=new MyStudent();
//myStudent.FName = "李乾龙";
//myStudent.FAge = 12;
//myStudent.FGender = "男";
//myStudent.FMath = 100;
//myStudent.FEnglish = 50;
//myStudent.FClassId = 2;
//myStudent.FBirthday = DateTime.Now;
////第三步:告诉上下文咱们对实体做添加操作。
//dbContext.MyStudent.Add(myStudent); ////第四步:告诉上下文去保存吧
//dbContext.SaveChanges();
#endregion #region 修改
//创建上下文
CCDBEntities dbContext=new CCDBEntities(); //EF的表必须有主键,没有会报错。
//操作实体
MyStudent myStudent = new MyStudent();
//【这里注意:对数据进行修改,如果字段是不可以为空的,那么就必需对该字段进行赋值。】 myStudent.Fid = ;//修改或者删除必须要有主键
myStudent.FName = "李乾龙";
myStudent.FAge = ;
myStudent.FGender = "男";
myStudent.FEnglish = ;
myStudent.FClassId = ;
myStudent.FBirthday = DateTime.Now;
//告诉上下文咱们对实体进行修改操作
//对数据库就行修改
dbContext.Entry(myStudent).State = EntityState.Modified;
////对数据库进行删除
//dbContext.Entry(myStudent).State = EntityState.Deleted;
////给数据库添加一组数据
//dbContext.Entry(myStudent).State = EntityState.Added;
////不对数据库做任何修改
//dbContext.Entry(myStudent).State = EntityState.Unchanged;
//告诉上下文把所有标记了,状态的实体映射回数据库。
dbContext.SaveChanges();//把所有标记为Modified都生成update语句执行到数据库里面去。 #endregion
}

8. 第二种方式:Model First 【模型优先】

第一步:首先创建一个控制台应用程序:

第二步:添加"ADO.NET 实体数据模型"程序,如下图:

第三步:点击添加,选择"空EF设计器模型",然后点击完成

第四步:点击完成之后,就会出现如下界面:

第五步:设计模型:如下步骤:

·在空白处右击,然后选择新增-》实体:如下图:

·如下图所示:

·然后选中属性,新增其他列,一般选择"标量属性"

·要想改变每一个实体的属性值,直接选中,然后按F4就可以对其进行修改。

如何建立两个表之间的关系?如下步骤:

·在空白出右击,新增-》关联

·表与表之间无非是:一对一、一对多、多对多

如上图,选中就可以了

注意:不过一般处理多对多关系时,都需要一个中间表,用来连接两个表的对应关系。

所以还得需要一个表来存储两个表的Id,

注意:中间表的命名:R_表一_表二

    第六步:新建数据库:

        ·表模型设计完成之后,在空白处右击选择"根据模型生成数据库(G)… "

·如下所示:

·新建连接,如下图:

注意:可以新建数据库,也可以选择已存在的数据库

第七步:这时候,数据库中就出现了你新建的数据,但是数据库中暂时还没有表,然后当你点击上面的完成之后,就会出现以sql后缀的文件,然后在空白处右击,选择执行就可以了,然后再看看数据库中是否现在出现表了?

示例代码如下:

 class Program
{
static void Main(string[] args)
{
//做:添加一条用户信息,并顺便给用户下两个订单 #region 一对多关系
//创建数据库访问上下文。
DBModelFirstContainer dbContext = new DBModelFirstContainer(); ////创建用户实体和订单实体
//UserInfo userInfo = new UserInfo(); //userInfo.UName = "杨";
//userInfo.Age = 18; ////告诉上下文对实体做添加操作。
////dbContext.UserInfoSet.Add(userInfo); //dbContext.Entry(userInfo).State = EntityState.Added; ////创建两个订单
//OrderInfo order1 = new OrderInfo();
//order1.Content = "shit1";
//dbContext.Entry(order1).State = EntityState.Added; ////创建两个订单
//OrderInfo order2 = new OrderInfo();
//order2.Content = "shit2";
//dbContext.Entry(order2).State = EntityState.Added; ////添加实体之间的关联
////处理订单1跟用户的关系
//order1.UserInfoId = userInfo.Id; ////处理订单2跟用户的关系
//order2.UserInfo = userInfo; ////从用户角度去添加关联
//userInfo.OrderInfo.Add(order1);
//userInfo.OrderInfo.Add(order2);
#endregion #region 多对多关系
Department department =new Department(); department.DepName = "研发部";
dbContext.DepartmentSet.Add(department); ActionInfo actionInfo1=new ActionInfo();
dbContext.ActionInfoSet.Add(actionInfo1); ActionInfo actionInfo2 = new ActionInfo();
dbContext.ActionInfoSet.Add(actionInfo2); department.ActionInfo.Add(actionInfo1);
department.ActionInfo.Add(actionInfo2);
#endregion dbContext.SaveChanges();
}
}

9. 第三中方式:Code first 【没有模型,没有数据库,只有代码】

第一步:首先创建一个控制台应用程序:

第二步:添加"ADO.NET 实体数据模型"程序,如下图:

第三步:然后点击确定,选择如下图所示的"空Code First模型",点击完成

第四步:删除刚刚建立的模型。?怎么回事,好不容易建立的模型,为啥又要删了,,这里的主要目的是为了添加几个引用,自己手动添加有点麻烦,所以使用这种方式既可以添加引用集。还有另外一种办法,如下:

除了通过以上的方法快捷添加引用,还可以通过如下方法添加:

·右击解决方案=》选择"管理NuGet程序包",如下图:

·然后安装EntityFramework

这样就快捷的添加引用集了。

第五步:手动敲代码:

//UserInfo中的代码
public class UserInfo
{
public UserInfo()
{
OrderInfo=new HashSet<OrderInfo>();
}
[Key]
public int Id { get; set; }
[StringLength()]
public string UName { get; set; } public ICollection<OrderInfo> OrderInfo { get; set; }
}
//OrderInfo中的代码
public class OrderInfo
{
[Key]
public int Id { get; set; }
[StringLength()]
public string Content { get; set; } public UserInfo UserInfo { get; set; } }
//上下文CodeDbContext中的代码
public class CodeDbContext:DbContext
{
public CodeDbContext():base("name=mysqlserver")
{
if (!this.Database.Exists())
{
this.Database.CreateIfNotExists();
}
} //public void InitDatabase()
//{
// if (!this.Database.Exists())
// {
// this.Database.CreateIfNotExists();
// }
//} public DbSet<UserInfo> UserInfo { get; set; }
public DbSet<OrderInfo> OrderInfo { get; set; }
}
//配置文件【连接字符串】
<connectionStrings>
<add name="mysqlserver" connectionString="Data Source=.;Initial Catalog=DemoCodeFirst;User ID=sa;Password=1q2w3e4R" providerName="System.Data.SqlClient"/>
<!--<add name="mysqlserver" connectionString="server=.;pwd=1q2w3e4R;uid=sa;database=DemoCodeDb7" providerName="System.Data.SqlClient" />-->
</connectionStrings>
//注意:添加连接字符串的时候,要将连接字符串自写在configSections的后面,要是没有就算了。

第六步:在主函数中运行即可。如下代码:

class Program
{
static void Main(string[] args)
{
//创建上下文
CodeDbContext codeDbContext=new CodeDbContext(); //codeDbContext.InitDatabase();
//创建用户实例
UserInfo userInfo=new UserInfo();
userInfo.UName = "taidou";
codeDbContext.UserInfo.Add(userInfo); //创建订单实例
OrderInfo orderInfo1=new OrderInfo();
orderInfo1.Content = "苹果手机";
codeDbContext.OrderInfo.Add(orderInfo1); OrderInfo orderInfo2 = new OrderInfo();
orderInfo2.Content = "苹果电脑";
codeDbContext.OrderInfo.Add(orderInfo2); //设置关系
userInfo.OrderInfo.Add(orderInfo1);
userInfo.OrderInfo.Add(orderInfo2); codeDbContext.SaveChanges();
}
}

Code first的另外一种形式;

参考:http://go.microsoft.com/fwlink/?LinkId=390109

初识EF的更多相关文章

  1. ASP.NET MVC 基础

    ASP.NET MVC oo1 Mvc准备工作课程安排:ORM->AspNet MVC开发环境:VS2012/VS2013SqlServer2008/2005主讲Asp.Net Mvc4 Raz ...

  2. %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91

    "%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...

  3. Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)

    Cookies   1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...

  4. EF Code First学习笔记 初识Code First

    Code First是Entity Framework提供的一种新的编程模型.通过Code First我们可以在还没有建立数据库的情况下就开始编码,然后通过代码来生成数据库. 下面通过一个简单的示例来 ...

  5. EF Code First学习笔记 初识Code First(转)

    Code First是Entity Framework提供的一种新的编程模型.通过Code First我们可以在还没有建立数据库的情况下就开始编码,然后通过代码来生成数据库. 下面通过一个简单的示例来 ...

  6. EF CodeFirst 初识

    随着EntityFramework的发展,原先的三种方式,{Code First ,Model First,Database First }  CodeFirst基本摆脱了另外两种方式 成为了 最受欢 ...

  7. ORM之EF初识

    之前有写过ef的codefirst,今天来更进一步认识EF! 一:EF的初步认识 ORM(Object Relational Mapping):对象关系映射,其实就是一种对数据访问的封装.主要实现流程 ...

  8. MongoDB【第一篇】MongodDB初识

    NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...

  9. [ActiveMQ]初识ActiveMQ

    初识ActiveMQ ActiveMQ介绍 官方网站:http://activemq.apache.org/ 最新版本:ActiveMQ 5.14.1(2016-10-28) 最新版本下载链接:htt ...

随机推荐

  1. 16.java.lang.InterruptedException

    java.lang.InterruptedException 被中止异常 当某个线程处于长时间的等待.休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常 ...

  2. 权威验证:MSDN会明确告诉你下载的光盘镜像是否正宗微软原版

    MSDN是微软官方网站.这个网站的职能之一,就是向MSDN订户(付费相当高昂)提供Microsoft Windows资源,即大家通常说的操作系统光盘镜像.相信大家手头都有不少这类下载,但究竟是否微软的 ...

  3. MFC渐入渐出框实现方式二

    类似360消息弹出框,实现方式一见http://blog.csdn.net/segen_jaa/article/details/7848598. 本文采用另外的API实现渐入渐出效果. 主要API:S ...

  4. CodeForces 135C C. Zero-One

    题目 题意: 一个01串,AB两个人轮流删去一个字符,直到只剩两个,A先手.最后剩的两位组成一个二进制数,A要使其最小,B要使其最大. 有一些部分不知道原来是什么,用?表示,求所有的可能里,最后剩下的 ...

  5. lua IDE for cocos2d-x development

    原文链接:http://hi.baidu.com/balduc0m/item/648093dad238bd2a39f6f78e lua IDE for cocos2d-x development -- ...

  6. python手记(36)

    #!/usr/bin/env python #-*- coding: utf-8 -*- #code:myhaspl@qq.com import cv2 import numpy as np fn=& ...

  7. 从零开始学习UNITY3D(GUI篇 2)

    复合控件极其使用,toolbar,selectgrid 先看效果图: toolbar可以看作是一个button按钮的集合,一次只能点击一个按钮, selectgrid又可以堪称是一个toolbar的集 ...

  8. mockjax MOCK.js的拦截ajax请求

    今天看了下 mock.js的拦截请求 .https://github.com/nuysoft/Mock/blob/master/src/mockjax.js //覆盖(拦截) Ajax 请求,目前内置 ...

  9. 官网下载旧版本的Xcode

    1.登录“苹果开发者中心”——>“SDKs” 2.点击“Xcode” 3.点击页面顶部的“Download” 4.点击页面左下方的“additional tools”,这样就可以查询到各个Xco ...

  10. 如何调试框架中的app

    1,在编写的app中添加断点,并重新生成或编译 2,找到框架app的相应位置代开文件把所用到的dll重新替换成上步生成的dll(bin->debug) 3,运行框架,在VS打开调试->附加 ...