EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)一样,

一是为了使开发人员以操作对象的方式去操作关系型数据表。

二是为了屏蔽底层不同厂商的数据库,开发人员面向ORM框架编写数据的CRUD(Create,Retrieve,Update,Delete)操作,再由ORM框架将这些操作翻译成不同数据库厂商的语言。

从EF 4.X开始支持三种构建方法:1. Database First方法。2.Model First方法。3.Code First 方法。

本次测试以Visual Studio2013 / MS Sql Server2012 / Entity Framework 6.X 测试EF

Model First Demo (Models修改了,中间不能直接映射数据库)

【Model First 导航属性:不需要自己创建,是表之间有了关联之后,自己就会创建出来】

//注意:更新Model到数据库时会删除原来表格和数据,再创建新的表格

关键:关系的创建

1: 创建空模型的实体数据模型,

2: 创建实体、关系

3: 关系包括:1:1,1:n,m:n (建议不要使用1:1,性能低(不会延迟加载,添加时必须同时创建两个对象),可以使用1:m的方式进行代替处理)

  关系m:n,有一张中间表,左:1:m 关系,右:1:n 关系,在数据库中存在这张中间表,在edmx中不存在(可以使用导航属性操作m:n关系)

4: 可以生成导航属性,也可以不生成

1:打开SQLServer2012,使用下面SQL文本创建MyFirstModelFirstEF数据库(Model First EF不会帮我们创建数据库,只会帮我们创建表。所以我们要事先把数据库建立好)

create database MyFirstModelFirstEF
on primary
(
name='MyFirstModelFirstEF.mdf',
--修改为自己电脑上SQL DB路径
filename='D:\yangZ_MSSQL\MyFirstModelFirstEF.mdf',
size=5mb,
maxsize=100mb,
filegrowth=10%
)
log on
(
name='MyFirstModelFirstEF_log.ldf',
--修改为自己电脑上SQL DB路径
filename='D:\yangZ_MSSQL\MyFirstModelFirstEF_log.ldf',
size=2mb,
maxsize=100mb,
filegrowth=5mb
)
go

2:新建ConsoleApplication应用程序

3:在EFDataBaseFirstDemo上 右键-->新建-->新建项-->数据-->ADO.NET实体数据模型,选择空模型,然后点击完成

4:此时会自动打开**.edmx设计界面(若没有打开,直接在项目解决方案中,双击**.edmx文件)

 

5:通过edmx设计界面, 我们把上次Database First Demo中的CustomerInfo/OrderInfo表格生成出来,如下图所示,并导入数据库

6:在edmx设计页面,一种可以通过工具箱,拖拽设计页面,另外一种直接右键-->新增来设计表格,本次直接通过右键-->新增来设计表格

6.1:设计CustomerInfo表格,在**.edmx设计界面空白处,直接右键-->新增-->实体,填写相关内容(在这里可以设置主键id为Identity,默认为自增长为1,这个在Model First设计界面没办法修改默认自增长值)

 

此时,选中id属性,鼠标右键-->属性(或者直接F4),可以打开属性界面,在属性界面可以继续修改刚刚创建的字段

6.2:继续新增customerName string类型/customerDate datetime类型

选中CustomerInfo设计界面,右键-->新增-->标量属性,修改name==customerName,选中刚刚新增的customerName字段,修改属性(F4)

关于MSSQL Server数据类型介绍参考:http://www.cnblogs.com/Dr-Hao/p/5197238.html

 

6.3:新增customerDate datetime类型字段,右键-->新增-->标量属性,修改name==customerDate,选中刚刚新增的customerDate字段,修改属性(F4)

关于MSSQL Server数据类型介绍参考:http://www.cnblogs.com/Dr-Hao/p/5197238.html

   

至此CustomerInfo数据库字段已经创建完毕,OrderInfo表格和字段(id[int],orderName[nvarchar(100)],customerId[int,foreign key])创建类似

6.4:把CustomerInfo和OrderInfo表格建立关联关系(在**.edmx空白处,右键单击-->新增-->关联)

 

最后整体**.edmx实体图显示如下:

7:此时,数据库中没有数据表。我们在edm设计器上空白地方,右键-->根据模型生成数据库

[Model First EF不会帮我们创建数据库,只会帮我们创建表。所以我们要事先把数据库建立好]

点击下一步,如下图,生成对应的SQL文本

点击完成(有可能出现下面的警告),点击确定之后,如下图所示:

当连接服务器成功以后,点击:执行脚本。则会在数据库MyFirstModelFirstEF中生成相应的数据表

    

最后ModelFirstEFDemo整体结构如下所示:

最后在ConsoleApplication中做一个增加数据的Demo

DbContext context = new Model1Container();

//使用导航属性 新增CustomerInfo和OrderInfo数据
CustomerInfo customer = new CustomerInfo()
{
customerName = "ModelFirstTestOne",
customerDate = DateTime.Now
};
customer.OrderInfo.Add(new OrderInfo()
{
orderName = "ModelFirstTestTwo"
});
context.Set<CustomerInfo>().Add(customer);
context.SaveChanges();

此时数据库数据如下所示:

参考文章:

ASP.NET MVC EF直接更新数据(不需查询):http://www.cnblogs.com/Dr-Hao/p/5255630.html

ASP.NET EF(LINQ/Lambda查询):http://www.cnblogs.com/Dr-Hao/p/5356928.html

ASP.NET EF 使用LinqPad 快速学习Linq:http://www.cnblogs.com/Dr-Hao/p/5357112.html

Ps:使用EF Model First时,若修改Model结构,或者字段,需要在**.edmx中做如下操作

重复第7步骤:此时,数据库中没有数据表。我们在edm设计器上空白地方,右键-->根据模型生成数据库 [Model First EF不会帮我们创建数据库,只会帮我们创建表。所以我们要事先把数据库建立好]

注意:更新Model到数据库时会删除原来表格和数据,再创建新的表格

即为:原来表格中的数据都会删除掉,然后重新创建新的表格(对于数据量比较大的表格,不能这样操作),可以通过【手动修改数据库和edmx文件】

Entity Framework(EF的Model First方法)的更多相关文章

  1. Entity Framework(EF的Code First方法)

    EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...

  2. Entity Framework(EF的Database First方法)

    EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...

  3. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

  4. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  5. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  6. ASP.NET Core 开发 - Entity Framework (EF) Core

    EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...

  7. [转]Using Entity Framework (EF) Code-First Migrations in nopCommerce for Fast Customizations

    本文转自:https://www.pronopcommerce.com/using-entity-framework-ef-code-first-migrations-in-nopcommerce-f ...

  8. ADO.NET Entity Framework(EF)

    ylbtech-Miscellaneos: ADO.NET Entity Framework(EF) A,返回顶部 1, ADO.NET Entity Framework 是微软以 ADO.NET 为 ...

  9. Entity Framework公共的增删改方法

    using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.I ...

随机推荐

  1. 微信小程序 功能函数 openid本地和网络请求

    本地-------------------------------------------------------------------------------------------------- ...

  2. 深度学习:卷积神经网络(convolution neural network)

    (一)卷积神经网络 卷积神经网络最早是由Lecun在1998年提出的. 卷积神经网络通畅使用的三个基本概念为: 1.局部视觉域: 2.权值共享: 3.池化操作. 在卷积神经网络中,局部接受域表明输入图 ...

  3. LOJ #143. 质数判定

    题目描述 判定输入的数是不是质数. 输入格式 若干行,一行一个数 x. 行数不超过 1.5×104​​. 输出格式 对于输入的每一行,如果 x 是质数输出一行 Y,否则输出一行 N. 样例 样例输入 ...

  4. Gauss Prime UVA - 1415

    题意:给出a和b判定是否为高斯素数 解析: 普通的高斯整数i = sqrt(-1) 高斯整数是素数当且仅当: a.b中有一个是零,另一个是形为或其相反数的素数: 或a.b均不为零,而为素数. 这题 提 ...

  5. 【刷题】洛谷 P3613 睡觉困难综合征

    题目背景 刚立完Flag我就挂了WC和THUWC... 时间限制0.5s,空间限制128MB 因为Claris大佬帮助一周目由乃通过了Deus的题,所以一周目的由乃前往二周目世界找雪辉去了 由于二周目 ...

  6. 深踩 AndroidStudio 缓存的坑

    本文记录的是今天在群里提到的昨天所踩的一个坑,有关 AndroidStudio 缓存的. 先说一下背景. 我负责的一个项目,对一个图表库有外部依赖.这个图表库是我在维护的,由于新功能在开发中,所以我就 ...

  7. 【BZOJ1046】上升序列(动态规划,贪心)

    [BZOJ1046]上升序列(动态规划,贪心) 题面 BZOJ 洛谷 题解 我一开始看错题了,一度以为是字典序最小的序列. 最后发现它要求的字典序是位置的字典序最小. 那就很好办了. 设\(f[i]\ ...

  8. 3Sum Closest - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 3Sum Closest - LeetCode 注意点 和3Sum那道题的target是0,这道题是题目给定的 要先计算误差再移动指针 解法 解法一:做法 ...

  9. Container With Most Water - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Container With Most Water - LeetCode 注意点 没什么好注意的... 解法 解法一:暴力求解,假设任意两个端点会是最佳答 ...

  10. 一步步创建第一个Docker App —— 3. 创建一个集群Swarm

    原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...