在上一篇 《实体框架(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)快速入门--实例篇的更多相关文章

  1. 实体框架(Entity Framework)快速入门

    实体 框架 (Entity Framework )简介 实体框架Entity Framework 是 ADO .NET 中的一组支持 开发 面向数据的软件应用程序的技术.是微软的一个ORM框架. OR ...

  2. Entity Framework快速入门--ModelFirst

    Entity Framework带给我们的不仅仅是操作上的方便,而且使用上也很是考虑了用户的友好交互,EF4.0与vs2010的完美融合也是我们选择它的一个理由吧.相比Nhibernate微软这方面做 ...

  3. Entity Framework快速入门--IQueryable与IEnumberable的区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...

  4. ADO.NET实体框架Entity Framework模型-基于元数据解析

           上一篇简单介绍了EF的XML模型结构,在基于xml解析一文中,主要使用xml查询技术Xpath,XQuery来得到实体模型中相应信息的,由于这种方式在数据库庞大,表关系复杂的情况下,有诸 ...

  5. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名

    转自:http://www.cnblogs.com/huangcong/archive/2011/07/20/1931107.html 在之前的文本模板(T4)初体验中我们已经知道了T4的用处,下面就 ...

  6. 实体框架Entity Framework 4.1快速入门

    介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...

  7. Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

    在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制. 1.ObjectContext的处理机制 ObjectContext是 ...

  8. ADO.NET实体框架Entity Framework模型-基于XML解析

            最近由于项目需求,需要对实体框架内表之间的关系进行处理,主要功能要求是通过一表名,返回其在实体框架内的所有关系表.主外键及每个字段的属性.先简单描述我解决这个问题从开始到最后的分析实现 ...

  9. Entity Framework快速入门笔记—增删改查

    第一步:创建一个控制台应用程序,起名为EFDemo 2. 第二步:创建一个实体模型 (1)在EFDemo项目上面右击选择添加—新建项—在已安装的选项中选择数据—ADO.NET实体对象模型,如图所示: ...

随机推荐

  1. tomcat下载、安装

    下载 官网地址:https://tomcat.apache.org/download-80.cgi 安装 直接安装即可.安装完毕后Tomcat的目录结构如下: bin:脚本目录 ​ 启动脚本:star ...

  2. Elasticsearch 评分score计算中的Boost 和 queryNorm

    本来没有这篇文章,在公司分享ES的时候遇到一个问题,使用boost的时候,怎么从评分score中知道boost的影响. 虽然我们从查询结果可以直观看到,boost起了应有的作用,但是在explain的 ...

  3. 1.编译azkaban

    1.下载azkaban的源码 https://github.com/azkaban/azkaban.git 然后解压得到azkaban-master.zip,解压:unzip azkaban-mast ...

  4. 软工2017团队协作第七周——个人PSP

    10.27 --11.2本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 开始时间                结束时间 中断时间 实际用时 ...

  5. 课堂练习之找数字0-N中“1”出现的次数

    一.题目与要求 题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求:1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...

  6. CWnd类虚函数的调用时机、缺省实现

    MFC(VC6.0)的CWnd及其子类中,有如下三个函数: class CWnd : public CCmdTarget{    public:        virtual BOOL PreCrea ...

  7. 3ds Max学习日记(五)

      把实验室要用的小工具做了出来后,忙里偷闲,把第四章没看完的视频看完了.修改器(modifier)什么的还是挺好玩的.   FFD,车削,倒角,倒角剖面,对称,挤出,晶格,扭曲,融化,弯曲,网格平滑 ...

  8. [STAThread] 作用

    [STAThread]是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA. [STAThread]是声明开始线程用 ...

  9. Thread.Sleep(0)

    理解Thread.Sleep函数 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4- ...

  10. Android基础------Intent组件

    1.什么是intent 同Activity一样,也是Android应用组件在Android中承担着一种指令输出的作用Intent负责对应用中一次操作的动作及动作相关的数据进行描述.Android则根据 ...