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. 修改SlidingMenu,使其能够完美运行

    今天想给项目添加一个侧边栏的效果,使用到了https://github.com/jfeinstein10/SlidingMenu这个开源项目.项目本身可以通过github下载.此项目同时又依赖于一个名 ...

  2. mini KMS Activator v1.3破解激活microsoft Office 2010 RTM

    利用mini KMS Activator v1.3破解激活microsoft Office 2010 RTM方法,只是为体验office而做测试使用的哦...大家觉得好就自觉购买正版去... 使用步骤 ...

  3. 字符编码和python使用encode,decode转换utf-8, gbk, gb2312

    ASCII码 标准ASCII码使用7位二进制数表示大写或小写字母,数字0到9标点符号以及在美式英语中使用的特殊控制字符. 在标准ASCII码中,最高位(b7)用作奇偶校验位,所谓奇偶校验,是指在代码传 ...

  4. 解析nodejs微信开发-2获取ticket

    获取ticket是需要拼接url,url中需要获得的tocken 1.先判断有无tocken:若有则拼接url: 2.请求url: a.处理回调数据,注意时间戳和签名处理方式,此两项并未存到ticke ...

  5. lighttpd配置虚拟主机/php等WEB环境

    lighttpd(1.4.37)配置如下 server.document-root = "/var/www/lighttpd/" server.port = 8888 server ...

  6. Alisha’s Party(队列)

    Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  7. Android 读取Assets中图片

    bgimg0 = getImageFromAssetsFile("Cat_Blink/cat_blink0000.png"); * * 从Assets中读取图片 */ privat ...

  8. SQL学习之学会使用子查询

    1.SELECT语句是SQL的查询.我之前的随笔中所用的SELECT语句都是简单的查询,即从单个数据库表中检索数据的单条SELECT语句. 查询:任何SQL语句都是查询,但此术语一般指SELECT语句 ...

  9. Clamp函数

    Clamp函数可以将随机变化的数值限制在一个给定的区间[min, max]内: template<class T> T Clamp(T x, T min, T max) { if (x & ...

  10. istringstream和ostringstream的使用方法

    写程序用到istringstream和ostringstream,看了别人的博文,借鉴~~~~~~. iostream 标准库支持内存中的输入/输出,只要将流与存储在程序内存中的 string 对象捆 ...