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. SQL Server save transaction

    准备: create table Nums(X int); 目的:只向表中插入一行. --------------------------------------------------------- ...

  2. 使用Ramdisk 加速 Visualstudio 编译调试

    一般来说ASP.NET在执行的时候,会先动态编译在目录 C:\Windows\Microsoft.NET\Framework64\版本\Temporary ASP.NET Files 由于每次修改程序 ...

  3. 玉兔IM(康林的博客)

    玉兔即时通信 作者:康林(msn.email:kl222@126.com:QQ:16614119) 博客:http://blog.csdn.net/kl222http://blog.csdn.net/ ...

  4. MFC 可以设置背景色、字体、字体颜色、透明背景的 Static 静态文本控件

    MFC库里没有符合这个条件的控件,于是我自己写了一个,初步测试有效. 注:可以设置透明背景,但还不能做到透明度设置(如50%透明度) 如果设置了背景色,就不保留透明背景 默认背景色是透明的 [cpp] ...

  5. iOS动态运行时方法

    在某些时候,程序可能需要根据获取的参数来决定调用的方法. 要实现这样的功能,就需要使用到动态运行时方法了. 首先需要定义好接口,以便调用. 然后就是动态调用定义好的方法. 这里有两种方法, 第一种: ...

  6. C实例--推断一个字符串是否是回文数

    回文是指顺读和反读内容均同样的字符串.比如"121","ABBA","X"等. 本实例将编写函数推断字符串是否是回文. 引入两个指针变量,開 ...

  7. 关于html5之canvas的那些事

    何为canvas <canvas> 标签只是图形容器,您必须使用脚本来绘制图形.默认情况下该矩形区域宽为300像素,高为150像素,设置宽高必须在canvas标签内部,不能加单位px. 大 ...

  8. JavaSE思维导图(三)

  9. MMDrawerController 的实践,已经实现,几行简单的代码实现侧栏

    学习方法,看readme,看给的Demo 看功能怎么实现的去模仿,个人感觉模仿是最快的学习方法 废话少说,上代码 导入MMDrawerController框架我就不多少了,之后做什么才是我们才关注的事 ...

  10. hibernate sql查询后对象转换成实体类

    在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用  session.createSQLQuery(sql).setResultTransform ...