EntityFramework Database First簡介

.net在開發中比較常使用DB first來建立關聯模型,

因為通常系統已經有資料庫了,或是有些大型專案是由DBA在管控DB schema,

所以在已經存在DB的情況下,EF提供了DB first來實現ORM的開發,

透過EDMX檔案時產生實體關聯對應,

首先建立一個名為Blog的DB,

並使用SQL script建立兩張資料表,

CREATE TABLE [dbo].[Blogs] (
[BlogId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (200) NULL,
[Url] NVARCHAR (200) NULL,
CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
[PostId] INT IDENTITY (1, 1) NOT NULL,
[Title] NVARCHAR (200) NULL,
[Content] NTEXT NULL,
[BlogId] INT NOT NULL,
CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE

在Model資料夾底下建立模型

model

照著設定完成之後,可以在EDXM檔中看到對應的Table

db

還可以看到系統幫我們產生的像先前在code first範例中所以必須手動建立的DbContext和類別,

datacontext

class

接著就和之前一樣透過scaffolding來新增BlogsController

add

Visual Studio 幫我們自動產生 CRUD頁面

scaffold

就可以完成一個簡單的DB first範例

result

如果遇到資料表有異動情況,例如在blogs新增一個欄位

edit

必須在EDMX檔案中去更新對應,

選擇由資料更新模型,並選擇Blog
update

更新完成後,可以看到模型也跟著更新完成了

new-model

 

class