实体框架(Entity Framework)快速入门--实例篇
在上一篇 《实体框架(Entity Framework)快速入门》 中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象,看操作步骤
第一步:创建控制台项目
这个就不多说了,如果新建项目你还不知道,那先去学学基础吧。
第二步:创建实体模型
在项目上右击 添加新建项目→Ado .Net 实体数据模型
如下图所示:

第三步:与现有的 数据库 进行连接生成EF实体
在做这步之前,首先确定你是否已经有现有数据库,当然在这提供我自己的数据库脚本。
-- --------------------------------------------------
-- Entity Designer DDL Scr
ip
t for
SQL Server
2005, 2008, and Azure
-- --------------------------------------------------
-- Date Created: 02/20/2011 09:47:54
-- Generated from EDMX file: E:Jobprojects
Web
TestEFModel1.edmx
-- -------------------------------------------------- SET QUOTED_IDENTIFIER OFF;
GO
USE [SchoolDB];
GO
IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]');
GO -- --------------------------------------------------
-- Dropping existing FOREIGN KEY constraints
-- -------------------------------------------------- IF OBJECT_ID(N'[dbo].[FK_Cl
as
sStudent]', 'F') IS NOT NULL
ALTER TABLE [dbo].[T_Student] DROP CONSTRAINT [FK_ClassStudent];
GO
IF OBJECT_ID(N'[dbo].[FK_ClassTeacher]', 'F') IS NOT NULL
ALTER TABLE [dbo].[T_Teacher] DROP CONSTRAINT [FK_ClassTeacher];
GO -- --------------------------------------------------
-- Dropping existing tables
-- -------------------------------------------------- IF OBJECT_ID(N'[dbo].[T_Class]', 'U') IS NOT NULL
DROP TABLE [dbo].[T_Class];
GO
IF OBJECT_ID(N'[dbo].[T_Student]', 'U') IS NOT NULL
DROP TABLE [dbo].[T_Student];
GO
IF OBJECT_ID(N'[dbo].[T_Teacher]', 'U') IS NOT NULL
DROP TABLE [dbo].[T_Teacher];
GO -- --------------------------------------------------
-- Creating all tables
-- -------------------------------------------------- -- Creating table 'T_Class'
CREATE TABLE [dbo].[T_Class] (
[ID] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(max) NOT NULL
);
GO -- Creating table 'T_Student'
CREATE TABLE [dbo].[T_Student] (
[ID] uniqueidentifier NOT NULL,
[Name] nvarchar(max) NOT NULL,
[Cla
ssI
D] int NOT NULL,
[Phone] nvarchar(max) NOT NULL,
[Email] nvarchar(max) NOT NULL
);
GO -- Creating table 'T_Teacher'
CREATE TABLE [dbo].[T_Teacher] (
[ID] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(max) NOT NULL,
[Address] nvarchar(max) NOT NULL,
[Phone] nvarchar(max) NOT NULL,
[Email] nvarchar(max) NOT NULL,
[ClassID] int NOT NULL
);
GO -- --------------------------------------------------
-- Creating all PRIMARY KEY constraints
-- -------------------------------------------------- -- Creating primary key on [ID] in table 'T_Class'
ALTER TABLE [dbo].[T_Class]
ADD CONSTRAINT [PK_T_Class]
PRIMARY KEY CLUSTERED ([ID] ASC);
GO -- Creating primary key on [ID] in table 'T_Student'
ALTER TABLE [dbo].[T_Student]
ADD CONSTRAINT [PK_T_Student]
PRIMARY KEY CLUSTERED ([ID] ASC);
GO -- Creating primary key on [ID] in table 'T_Teacher'
ALTER TABLE [dbo].[T_Teacher]
ADD CONSTRAINT [PK_T_Teacher]
PRIMARY KEY CLUSTERED ([ID] ASC);
GO -- --------------------------------------------------
-- Creating all FOREIGN KEY constraints
-- -------------------------------------------------- -- Creating foreign key on [ClassID] in table 'T_Student'
ALTER TABLE [dbo].[T_Student]
ADD CONSTRAINT [FK_ClassStudent]
FOREIGN KEY ([ClassID])
REFERENCES [dbo].[T_Class]
([ID])
ON DELETE NO ACTION ON UPDATE NO ACTION; -- Creating non-clustered index for FOREIGN KEY 'FK_ClassStudent'
CREATE INDEX [IX_FK_ClassStudent]
ON [dbo].[T_Student]
([ClassID]);
GO -- Creating foreign key on [ClassID] in table 'T_Teacher'
ALTER TABLE [dbo].[T_Teacher]
ADD CONSTRAINT [FK_ClassTeacher]
FOREIGN KEY ([ClassID])
REFERENCES [dbo].[T_Class]
([ID])
ON DELETE NO ACTION ON UPDATE NO ACTION; -- Creating non-clustered index for FOREIGN KEY 'FK_ClassTeacher'
CREATE INDEX [IX_FK_ClassTeacher]
ON [dbo].[T_Teacher]
([ClassID]);
GO -- --------------------------------------------------
-- Script has ended
-- --------------------------------------------------
然后按照如下所示,选择从数据库生成实体数据模型【当然如果你想使用CodeFirst方式也是可以的,这是后话了】:

新建连接到现有的数据库,如下图所示:

点击下一步,选择我们要生成实体对应的表、试图、 存储过程 等,如下图所示:

最后点击完成,则系统帮我们生成了数据库实体类以及EDMX的定义文件。
如图所示(以下大图如果不能正常显示,请复制图片地址查看原图):

到现在我们前期的准备工作就结束了,我们接下来看看我们怎么使用EF帮我们生成的数据库网关
第四步:写增删改查来讲解EF的基本使用
添加如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace EF
{
class Program
{
static void Main(string[] args)
{
//创建数据库访问网关
using (SchoolDBEntities schoolEntities = new SchoolDBEntities())
{
//查询到老师对应的班级的外键,注意是使用的linq to ef ,它是生成的命令树,然后是生成的sql var cls = (from c in schoolEntities.T_Class
where c.ID == 2
select
c).SingleOrDefault<T_Class>();
//创建teacher一个实体
T_Teacher teacher = new T_Teacher();
teacher.Address = "北京海淀上地";
teacher.Email = "malun666@126.com";
teacher.T_Class = cls; teacher.Name = "Flydragon";
teacher.Phone = "110";
//将创建的实体,放入网关的数据实体的集合
schoolEntities.T_Teacher.AddObject(teacher);
//写回数据库
schoolEntities.SaveChanges();
}
Console.WriteLine("OK");
}
}
}
最终数据库中添加了一条数据,如下图所示:

然后我正好打开了Sql Server Profiler工具我们看一下,EF生成的SQL语句是什么,如下图所示:

最后一个就是执行insert插入数据库表的sql,如下图所示:

好这样我们一个入门的实例程序,就结束了,我们看到最后EF还是生成的SQL执行的。所以EF本身性能的损失也就是根据对实体集合的修改,然后根据edmx的定义最终成sql这段,也就是浪费了点cpu而已,而且ef还会自动帮我们对sql进行 优化 ,所以还是蛮不错的!
实体框架(Entity Framework)快速入门--实例篇的更多相关文章
- 实体框架(Entity Framework)快速入门
实体 框架 (Entity Framework )简介 实体框架Entity Framework 是 ADO .NET 中的一组支持 开发 面向数据的软件应用程序的技术.是微软的一个ORM框架. OR ...
- Entity Framework快速入门--ModelFirst
Entity Framework带给我们的不仅仅是操作上的方便,而且使用上也很是考虑了用户的友好交互,EF4.0与vs2010的完美融合也是我们选择它的一个理由吧.相比Nhibernate微软这方面做 ...
- Entity Framework快速入门--IQueryable与IEnumberable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...
- ADO.NET实体框架Entity Framework模型-基于元数据解析
上一篇简单介绍了EF的XML模型结构,在基于xml解析一文中,主要使用xml查询技术Xpath,XQuery来得到实体模型中相应信息的,由于这种方式在数据库庞大,表关系复杂的情况下,有诸 ...
- C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名
转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...
- 实体框架Entity Framework 4.1快速入门
介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...
- Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)
在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制. 1.ObjectContext的处理机制 ObjectContext是 ...
- ADO.NET实体框架Entity Framework模型-基于XML解析
最近由于项目需求,需要对实体框架内表之间的关系进行处理,主要功能要求是通过一表名,返回其在实体框架内的所有关系表.主外键及每个字段的属性.先简单描述我解决这个问题从开始到最后的分析实现 ...
- Entity Framework快速入门笔记—增删改查
第一步:创建一个控制台应用程序,起名为EFDemo 2. 第二步:创建一个实体模型 (1)在EFDemo项目上面右击选择添加—新建项—在已安装的选项中选择数据—ADO.NET实体对象模型,如图所示: ...
随机推荐
- 我的linux操作习惯
标签(空格分隔): ubuntu 最佳操作 用linux随时可能会有宕机的危险,谁知道我哪会神经病犯了呢.用deepin宕机的可能性会更高的,所以我才不得不安装一个windows做备份,然后把数据备份 ...
- 软件工程第四周作业-PSP
psp表格 类别 内容 开始时间 结束时间 中断时间 delta时间 学习 学习C# 10.6下午7:00 10.6下午8:00 - 60min 写代码 写主函数以及一些小的方法 10.7下午2:00 ...
- TCP 的有限状态机
TCP 有限状态机的图中每一个方框都是 TCP 可能具有的状态. 每个方框中的大写英文字符串是 TCP 标准所使用的 TCP 连接状态名. 状态之间的箭头表示可能发生的状态变迁. 箭头旁边的字,表明引 ...
- DDB与DIB
DB与DIB的区别是什么?觉得书上介绍的有点抽象.不容易理解.他们两者之间的区别的“物理意义” [“现实意义”]——姑且这么叫吧,呵呵!被这个问题困扰了很久,所以今天决定好好查资料总结一下,把它彻底搞 ...
- css那些事儿2 经典两列布局
<!DOCTYPE html> <html> <head> <title></title> <link rel="style ...
- 全面了解 Nginx 到底能做什么
来源:https://www.jianshu.com/p/8bf73d1a758c 前言 本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可 ...
- Delphi 模式窗体返回值ModalResult的使用方法及注意事项
1.基础知识简介: ModalResult是指一个模式窗体(form.showmodal)的返回值,一般用于相应窗体上按钮的ModalResult属性: 显示完窗体(关闭)后,会返回此属性预设的值做为 ...
- Tomcat 7优化配置
Tomcat 的优化不像其它软件那样,简简单单的修改几个参数就可以了,它的优化主要有三方面,分为系统优化,Tomcat 本身的优化,Java 虚拟机(JVM)调优.系统优化就不在介绍了,接下来就详细的 ...
- SpringBoot Web(SpringMVC)
入门工程: package com.example.demo.controller; import com.example.demo.entity.User; import org.springfra ...
- matlab exist函数
函数作用:用于确定某变量或值是否存在. 调用格式: exist主要有两种形式,一个参数和两个参数的,作用都是用于确定某值是否存在:1. b = exist( a) 若 a 存在,则 b = 1: 否则 ...