實體框架(Entity Framework)快速入門--實例篇


在上一篇 《實體框架(Entity Framework)快速入門》 中我們簡單了解的EF的定義和大體的情況,我們通過一步一步的做一個簡單的實際例子來讓大家對EF使用有個簡單印象,看操作步驟

第一步:創建控制台項目

這個就不多說了,如果新建項目你還不知道,那先去學學基礎吧。

第二步:創建實體模型

在項目上右擊 添加新建項目→Ado .Net 實體數據模型

如下圖所示:

第三步:與現有的 數據庫 進行連接生成EF實體

在做這步之前,首先確定你是否已經有現有數據庫,當然在這提供我自己的數據庫腳本。

View Code

-- --------------------------------------------------
-- 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進行 優化 ,所以還是蠻不錯的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM