1. 程式人生 > >ModelFirst ,DBFirst兩種設計模型的區別和兩種更新的區別

ModelFirst ,DBFirst兩種設計模型的區別和兩種更新的區別

一、EF 的三種設計模型CodeFirstModelFirst ,DBFirst三種 在軟體的實際開發中最常用的就是後兩種。下面簡單介紹兩種設計模型的區別和兩種更新的區別,如果你還不知道如何進行三種設計模式的設計,請參考我另外的幾篇文章:

1、ModelFirst 顧名思義就是首先設計實體模型,之後根據實體模型實現到資料庫的對映。

2、DBFirst 就是先進行資料庫的設計,之後根據資料庫生成實體資料模型。具體區別就是在新建實體資料模型時,實體模型嚮導中提示的根據資料庫生成還是空模型,如圖1所示,

                                                

                                                                                                                                                 圖

選擇根據資料庫生成就是DBFirst ,選擇空模型就是ModelFirst 

二、EF框架的原理就是把實體類的變化通過對映反應到資料庫中去,實現表的增刪改查。物件上下文是實體類操作資料庫的API。應用程式對實體類進行的增刪改查操作會經由物件上下文進行對映,最終轉換為SQL指令碼語言,然後執行,最終實現對錶的增刪改查。

當需要修改表的結構時,我們可以選擇根據模型更新資料庫和根據資料庫更新模型兩種。雙擊開啟實體模型檔案,如圖2所示

                                                                                             

                                                                                                                                  圖2

在空白頁右擊會顯示根據模型更新資料庫和根據資料庫更新模型。

下面著重講解根據模型更新資料庫:

以下摘錄了修改實體模型(增加一列)之後生成的SQL 指令碼語言

SET QUOTED_IDENTIFIER OFF;

GO

USE [Mine];

GO

IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]');

GO

-- --------------------------------------------------

-- Dropping existing FOREIGN KEY constraints

-- --------------------------------------------------

-- --------------------------------------------------

-- Dropping existing tables

-- --------------------------------------------------

IF OBJECT_ID(N'[dbo].[Accounts]', 'U') IS NOT NULL

    DROP TABLE [dbo].[Accounts];

GO

-- --------------------------------------------------

-- Creating all tables

-- --------------------------------------------------

-- Creating table 'Accounts'

CREATE TABLE [dbo].[Accounts] (

    [ID] int IDENTITY(1,1) NOT NULL,

    [Name] nvarchar(max)  NOT NULL,

    [Sex] nvarchar(max)  NOT NULL,

    [Sphone] nvarchar(max)  NOT NULL

);

GO

-- --------------------------------------------------

-- Creating all PRIMARY KEY constraints

-- --------------------------------------------------

-- Creating primary key on [ID] in table 'Accounts'

ALTER TABLE [dbo].[Accounts]

ADD CONSTRAINT [PK_Accounts]

    PRIMARY KEY CLUSTERED ([ID] ASC);

GO

-- --------------------------------------------------

-- Creating all FOREIGN KEY constraints

-- --------------------------------------------------

-- --------------------------------------------------

-- Script has ended

-- --------------------------------------------------

大家從上面可以看到,這個SQL指令碼的內容會先把各種外來鍵約束和表給刪除掉(理所當然,原先表中存在的資料也一併刪除了,在實際的軟體開發中此種操作會造成毀滅性的破壞),之後會再次建立一個新的表格。為避免此種情況的出生,當需要修改表的結構時最好的操作就是先修改資料庫,然後選擇根據資料庫更新模型。

以上只是我的一點見解,不對之處還請各位大牛指出。