Entity Framework 系統約定配置

2022-01-11 09:28:56 字數 2060 閱讀 5046

前言

code first之所以能夠讓開發人員以一種更加高效、靈活的方式進行資料操作有乙個重要的原因在於它的約定配置。現在軟體開發越來越複雜,大家都試圖將軟體設計的越來越靈活,很多內容我們都希望是可配置的,但是過多的配置也會帶來很大的工作量,解決這個問題的方法就是約定。對於一些簡單的,不太可能經常變化的內容我們以一種約定的方式進行設計。使用過其他orm框架的朋友可能知道一般orm都有對應的對映配置檔案(一般是乙個xml檔案),但是ef並沒有。在ef中是以一種約定的方式進行表、列同實體類進行對映的,與此同時為了提高最大的靈活性ef中可以通過fluent api和data annotations兩種方式對對映進行靈活配置。

entity framework 預設約定

1.將資料類的類名複數形式作為資料表名稱,並且使用「dbo」作為預設架構。

例如定義乙個person資料類,那麼將會自動生成「dbo.persons」表。

2.將資料類中的「id」屬性或者「《類名》+id」作為主鍵(不區分大小寫),並且如果該列為數值型別或者guid列將作為標識列。

例如在order類中如果有id或者orderid屬性將預設作為主鍵,二者均出現優先使用 「id」屬性。

3.使用導航屬性約束兩個表之間的關係,在從表資料類中除了導航屬性,推薦定義乙個外來鍵屬性在從表資料類中(如果不指定將預設生成乙個「《主表類名》+《主表類的主鍵名》」的外來鍵列;此外在主表中推薦定義乙個集合從表屬性使用者導航,當然這個屬性不定義也可以正常生成外來鍵關係但是不利於使用),具體規則:「《導航屬性名》+《主表的主鍵屬性名》」或者「《主表類名》+《主鍵屬性名》」又或者「《主表的主鍵屬性名》」,其屬性名不區分大小寫並且如果出現多種匹配按照先後順序匹配;如果不存在外來鍵屬性則外來鍵關係註冊為可選的,否則註冊為必選項並且此時將設定級聯刪除關係;如果在從表類中有多個導航屬性對應同乙個資料類那麼需要使用fluent api或者data annotations進行手動配置。

例如有乙個order類,主鍵為orderid,在orderdetail類中有乙個導航屬性order(order型別),那麼當你定義乙個orderid在orderdetail中,那麼在order和orderdetail直接將建立乙個級聯刪除關係。

4.當ef按照上述規則在資料類中沒有找到主鍵屬性時(或者通過fluent api、data annotations沒有定義)將認為此類為「複雜型別」。

例如在「person」資料類中有乙個「name」屬性,但是資料庫中可能將「name」分為firstname和lastname儲存,此時就可以定義乙個name類,在此類中不定義主鍵列定義「firstname」和「lastname」屬性,就會在表「dbo.people」中生成「name_firstname」和「name_lastname」列。

entity framework 手動定義約定

ef的預設約定不是一成不變的,我們可以選擇移除和修改它,例如ef預設生成資料表時將資料類名的複數形式作為表名,下面的**就可以移除這個規則:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.data.entity;

using codefirst.entities;

using system.componentmodel.dataannotations.schema;

using system.data.entity.modelconfiguration.conventions;

namespace codefirst

public dbsetperson

protected override void onmodelcreating(dbmodelbuilder modelbuilder)

}}

這些規則都在「system.data.entity.modelconfiguration.conventions」命名空間下,可以根據實際情況進行選擇。

一般情況下我們是不需要移除預設約定的,我們更多的時候是要修改豐富這些約定,達到對生成規則的更多細節控制。在ef提供了兩種方式進行對映配置:data annotations和fluent api。

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