要更改ef中的預設配置有兩個方法,乙個是用data annotations(在命名空間system.componentmodel.dataannotations;),直接作用於類的屬性上面;還有乙個就是fluent api,通過新增相應的配置類來覆蓋預設配置。現在我們用這兩個來對比了解ef中的約定配置。
主鍵:key
data annotations:通過key關鍵字來標識乙個主鍵
[key]fluent api:public int destinationid
public class breakawaycontext : dbcontext外來鍵public dbsetlodgings
protected override void onmodelcreating(dbmodelbuilder modelbuilder)
}
data annotations:
public int destinationid注意,指定列名存在,如上面的destinationid,則類中必須存在名稱為destinationid的屬性。[foreignkey("destinationid")]
public destination destination
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)]fluent api:沒有設定最小長度這個方法。public string name
[stringlength(30)]
public string country
modelbuilder.entity().property(p => p.name).hasmaxlength(30);非空modelbuilder.entity().property(p => p.country).hasmaxlength(30);
data annotations:用required來標識,還可以設定是否可允許空字串,顯示錯誤訊息等。
[required]fluent api:public string country
[required(errormessage="請輸入描述")]
public string description
modelbuilder.entity().property(p => p.country).isrequired();資料型別
data annotations:typename
//將string對映成ntext,預設為nvarchar(max)fluent api:[column(typename = "ntext")]
public string owner
modelbuilder.entity().property(p => p.owner).hascolumntype("ntext");表名
data annotations:table
[table("mylodging")]fluent api:public class lodging
public string name
public string owner
public decimal price
public bool isresort
public destination destination
}
modelbuilder.entity().totable("mylodging");列名
data annotations:column
[column("myname")]fluent api:public string name
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]fluent api:public byte timestamp
modelbuilder.entity().property(p => p.timestamp).isrowversion();複雜型別
data annotations:complextype
[complextype]fluent api:public class address
public string city
}
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中的約定配置。...