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. laravel报404错误与NGINX报404错误区别

      nginx自己配置的404页面 和laravel配置的404页面:如果报了404 :执行laravel的404页面: 那这个404页面对nginx来说意味着什么    laravel 路由和页面找 ...

  2. 深入探索.NET内部了解CLR如何创建运行时对象

    前言 SystemDomain, SharedDomain, and DefaultDomain. 对象布局和内存细节. 方法表布局. 方法分派(Method dispatching). 因为公共语言 ...

  3. CSS3 Selectors All In One

    CSS3 Selectors All In One https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors https://www ...

  4. Java线程池(一):初识

    1.什么是线程池? 简单粗暴的理解就是:装着一个或多个线程的容器,我们称这个容器为线程池. 在现实世界中,有着各种各样的“池”,例如游泳池.花池等等.那花池来说,里面种满了各种各样的鲜花,花池本身要做 ...

  5. UESTC 1832

    今天比赛的时候做的一个题目.感觉这个题目不错. 题目描述: Description In a laboratory, an assistant, Nathan Wada, is measuring w ...

  6. eclipse中添加配置文件夹config

    1. 在项目上右键->Build path->Configure Build Path->Source下的Add Folder,如图 2. 在弹出框中,Create New Fold ...

  7. 【Java并发编程】之五:volatile变量修饰符—意料之外的问题

    volatile用处说明 ​ 在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的 ...

  8. jmeter发送json数据,报405、400错误解决方案

    1.405错误解决方案:添加HTTP信息头管理器(错误因数:发送格式未设置) 2.400错误解决方案:json文本格式有误(注意:换行.空格等)解决方案:对照json文本数据(错误因数:发送的json ...

  9. Python 字节码是什么

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  10. python读取写入内存方法SringIO,BytesIO

    python中不仅仅可以在磁盘中写入文件,还允许直接在内存中直接写入数据:需要借助StringIO和BytesIO来实现: 1.直接操作StringIO from io import StringIO ...