EF Code First 學習筆記 約定配置

2021-09-06 07:50:37 字數 4351 閱讀 4315

要更改ef中的預設配置有兩個方法,乙個是用data annotations(在命名空間system.componentmodel.dataannotations;),直接作用於類的屬性上面;還有乙個就是fluent api,通過新增相應的配置類來覆蓋預設配置。現在我們用這兩個來對比了解ef中的約定配置。

主鍵:key

data annotations:通過key關鍵字來標識乙個主鍵

[key]

public

int destinationid

fluent api:

public

class

breakawaycontext : dbcontext

public dbsetlodgings

protected

override

void

onmodelcreating(dbmodelbuilder modelbuilder)

}

外來鍵

data annotations:

public

int destinationid

[foreignkey(

"destinationid")]

public destination destination

注意,指定列名存在,如上面的destinationid,則類中必須存在名稱為destinationid的屬性。

fluent api:

modelbuilder.entity().hasrequired(p => p.destination).withmany(p=>p.lodgings).hasforeignkey(p => p.destinationid);

長度

data annotations:通過stringlength(長度),minlength(最小長度)

,maxlength(最大長度)來設定資料庫中字段的長度。

[minlength(10),maxlength(30

)]

public

string name

[stringlength(

30)]

public

string country

fluent api:沒有設定最小長度這個方法。

modelbuilder.entity().property(p => p.name).hasmaxlength(30

); modelbuilder.entity

().property(p => p.country).hasmaxlength(30);

非空

data annotations:用required來標識,還可以設定是否可允許空字串,顯示錯誤訊息等。

[required]

public

string country

[required(errormessage="

請輸入描述")]

public

string description

fluent api:

modelbuilder.entity().property(p => p.country).isrequired();

資料型別

data annotations:typename

//

將string對映成ntext,預設為nvarchar(max)

[column(typename = "

ntext")]

public

string owner

fluent api:

modelbuilder.entity().property(p => p.owner).hascolumntype("

ntext

");

表名

data annotations:table

[table("

mylodging")]

public

class

lodging

public

string name

public

string owner

public

decimal price

public

bool isresort

public destination destination

}

fluent api:

modelbuilder.entity().totable("

mylodging

");

列名

data annotations:column

[column("

myname")]

public

string name

fluent api:

modelbuilder.entity().property(p => p.name).hascolumnname("

myname

");

自增長

如果主鍵是int型別,ef為預設設定為增長。但如果是guid型別,則要顯示的設定自增長。

data annotations:databasegenerated

public

class

person

public

string firstname

public

string lastname

}

看看建立資料的指令碼,會加一句

alter

table

[dbo

].[people

]add

default (newid()) for

[socialid

]

fluent api:

modelbuilder.entity().property(p => p.socialid).hasdatabasegeneratedoption(databasegeneratedoption.identity);

忽略列對映

類中有些屬性,特別是一些通過計算或合併列得出的結果,我們並不需要其記錄到資料庫中,就可以通過配置不讓它生成在資料庫中。

public

string

name

}

modelbuilder.entity().ignore(p => p.name);

忽略表對映

對於不需要對映到資料庫中的表,我們也可以取消其對映。

data annotations:

public

class

person

public

string firstname

public

string lastname

} fluent api:

modelbuilder.ignore();

時間戳

時間戳只對資料型別為byte的屬性有效,並且乙個類中只能有乙個設定為時間戳的屬性。

data annotations:timestamp

[timestamp]

public byte timestamp

fluent api:

modelbuilder.entity().property(p => p.timestamp).isrowversion();

複雜型別

data annotations:complextype

[complextype]

public

class

address

public

string city

}

fluent api:

modelbuilder.complextype();

關於什麼是複雜型別,可以參見:

EF CodeFirst學習筆記1

一直使用ef的dbfirst沒使用過codefirst,而且codefirst使用的人又多,雖然麻煩點但是還是要學下的。來寫個一使用的入門教程 新建乙個codefirst的demo,需引入entityframework 然後簡單建立一模型 這邊以table特性命名emp,預設如果不加此特性約定是以s...

EF Code First 學習筆記 約定配置

要更改ef中的預設配置有兩個方法,乙個是用data annotations 在命名空間system.componentmodel.dataannotations 直接作用於類的屬性上面 還有乙個就是fluent api,通過新增相應的配置類來覆蓋預設配置。現在我們用這兩個來對比了解ef中的約定配置。...

EF Code First 學習筆記 約定配置

要更改ef中的預設配置有兩個方法,乙個是用data annotations 在命名空間system.componentmodel.dataannotations 直接作用於類的屬性上面 還有乙個就是fluent api,通過新增相應的配置類來覆蓋預設配置。現在我們用這兩個來對比了解ef中的約定配置。...