Entity Framework 簡單屬性對映

2022-03-05 09:44:47 字數 2945 閱讀 5549

本節我們只介紹在ef中比較常見的對映

零、表名對映

預設情況下可以不配置表名,我們的模型名稱將會作為資料庫的表名。但是大部分專案會要求資料庫表名稱的規範,例如我們要將模型user在資料庫中對映為users,那麼我們可以這麼做,在派生類上下文中的onmodelcreating中進行如下定義:

modelbuilder.

entity

<

user

>()

.totbale

("users"

);

一、主鍵對映

表的主鍵我們一般習慣使用id或者以id結尾的方式來命名,ef預設情況下會將id或以id結尾的屬性作為主鍵,如果兩者都存在的話,缺省會以id作為主鍵。但是,還存在如下幾種情況:

0. 設定聯合主鍵;

主鍵為int型別,但是不是自增長的,而是手動分配的。

針對上面兩種情況,我們分別進行如下配置:

//設定聯合主鍵

modelbuilder.

entity

<

user

>()

.haskey

(k =

>

new)

;//手動分配主鍵值

modelbuilder.

entity

<

user

>()

.haskey

(k =

> k.id)

.property

(p =

> p.id)

.hasdatabasegeneratedoption

(databasegeneratedoption.none)

;

databasegeneratedoption 是列舉型別,值如下:值說明

identity

標識列computed

計算列none

手動分配值

二、數值對映

資料庫中的數值型別有很多種,c#中也有很多數值型別,但是我們無法直接將c#中的數值型別轉換為資料庫中的數值型別。那麼怎麼將c#數值型別對映為資料庫數值型別呢?這裡我們以 c#float為例,來看一下**:

modelbuilder.

entity

<

user

>()

.property

(p=>p.float)

;

通過上面的**,我們將 c#float型別對映為了資料庫的real型別。下表是c#數值型別對應的資料庫的數值型別:

c#數值型別

資料庫數值型別

intint

double

float

float

real

decimal

decimal(18,2)

int64

bigint

我們看到上表中有乙個c#數值型別decimal對應的資料庫數值型別是decimal(18,2),括號中的2代表小數點後保留2位,但是在一些情況下我們需要保留小數點後面n位,這時我們可以這麼做:

modelbuilder.

entity

<

user

>()

.property

(p=>p.money)

.hasprecision(18

,4);

三、字串對映

當我們未對string型別的屬性配置對映時,預設的資料庫型別是nvarchar(max),但是大部分情況下不會使用這個預設的對映。舉幾個例子來講解一下怎麼來改變這個預設對映。

字段不可為空

//設定name屬性在資料庫對映不可為空

modelbuilder.

entity

<

user

>()

.property

(p=>p.name)

.isrequired()

;

欄位可為空

//設定birthday屬性在資料庫對映可為空

modelbuilder.

entity

<

user

>()

.property

(p=>p.birthday)

.isoptional()

;

四、日期對映

ef中的日期型別在資料庫中預設對映為date,但是資料庫中的日期型別還有很多,並且有時候我們需要將日期型別對映為資料庫其他型別,那麼我們該怎麼做呢?這裡我們以對映為datetime為例:

modelbuilder.

entity

<

user

>()

.property

(p=>p.createdatetime)

.hascolumntype

("datetime"

);

注:數值型別和日期型別屬於值型別,因此我們不需要通過isrequired來配置對映字段不可為空,因為預設就是不為空的。但是可以通過isoptional設定可為空。

Entity Framework 架構簡介

當微軟的wcf 大行其道,通用資料訪問模型entity framework卻稍遜一籌,有很多需要完善和進步的地方,本文對entity framework 架構做一下簡介。實體框架 entitry framework 以下簡稱ef 看起來像乙個有趣的技術,更強大,比linq to sql 更先進。這兩...

entity framework 批量刪除

以前用sql寫批量刪除的時候,感覺挺利索的,簡潔地寫了 public bool delectusersuggest string addsql 然後在頁面層直接呼叫 現在用entity framework,感覺有點麻煩不能直接delete,還要先把資料查出來,以下是主要 1 先查出實體 region...

Entity Framework 動態查詢

不想多說什麼直接說 region 搜尋並分頁 ljy 傳入搜尋條件,當前頁碼,每頁的顯示的條數,資料的總數 輸出引數 三個引數,返回 商實體 搜尋條件 當前頁碼 每頁的顯示的條數 資料的總數 public iqueryable endregion 在頁面呼叫時如果通過時間來查詢,請記住一定要這樣寫 ...