前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Entity Framework快速入门--实例篇 DatabaseFirst

Entity Framework快速入门--实例篇 DatabaseFirst

作者头像
老马
发布2022-05-10 15:43:55
4650
发布2022-05-10 15:43:55
举报
文章被收录于专栏:老马寒门IT老马寒门IT

在上一篇中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象。好,废话少说,直入主题。

第一步:创建控制台项目

这个就不多说了,如果新建项目你还不知道,那先去学学基础吧。

第二步:创建实体模型

在项目上右击 添加新建项目→Ado.Net实体数据模型

如下图所示:

第三步:与现有的数据库进行连接生成EF实体

在做这步之前,首先确定你是否已经有现有数据库,当然在这提供我自己的数据库脚本。

代码语言:javascript
复制
-- --------------------------------------------------
-- Entity Designer DDL Script for SQL Server 2005, 2008, and Azure
-- --------------------------------------------------
-- Date Created: 02/20/2011 09:47:54
-- Generated from EDMX file: E:\Job\projects\WebTest\EF\Model1.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_ClassStudent]', '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,
    [ClassID] 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的基本使用

添加如下代码:

代码语言:javascript
复制
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进行优化,所以还是蛮不错的!

欢迎指点!

此实例代码下载

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第四步:写增删改查来讲解EF的基本使用
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档