本節我們只介紹在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 在頁面呼叫時如果通過時間來查詢,請記住一定要這樣寫 ...