ModelFirst ,DBFirst兩種設計模型的區別和兩種更新的區別
一、EF 的三種設計模型CodeFirst,ModelFirst ,DBFirst三種 在軟體的實際開發中最常用的就是後兩種。下面簡單介紹兩種設計模型的區別和兩種更新的區別,如果你還不知道如何進行三種設計模式的設計,請參考我另外的幾篇文章:
1、ModelFirst 顧名思義就是首先設計實體模型,之後根據實體模型實現到資料庫的對映。
2、DBFirst 就是先進行資料庫的設計,之後根據資料庫生成實體資料模型。具體區別就是在新建實體資料模型時,實體模型嚮導中提示的根據資料庫生成還是空模型,如圖1所示,
圖1
選擇根據資料庫生成就是DBFirst ,選擇空模型就是ModelFirst
二、EF框架的原理就是把實體類的變化通過對映反應到資料庫中去,實現表的增刪改查。物件上下文是實體類操作資料庫的API。應用程式對實體類進行的增刪改查操作會經由物件上下文進行對映,最終轉換為SQL指令碼語言,然後執行,最終實現對錶的增刪改查。
圖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指令碼的內容會先把各種外來鍵約束和表給刪除掉(理所當然,原先表中存在的資料也一併刪除了,在實際的軟體開發中此種操作會造成毀滅性的破壞),之後會再次建立一個新的表格。為避免此種情況的出生,當需要修改表的結構時最好的操作就是先修改資料庫,然後選擇根據資料庫更新模型。
以上只是我的一點見解,不對之處還請各位大牛指出。