您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)asp.net vs2010中如何使用ef code first,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
EF4.3中主要的新特性,允許通過(guò)CodeFirst創(chuàng)建的數(shù)據(jù)庫(kù)可以與你的代碼模型一起增量進(jìn)化。下面億速云小編來(lái)講解下asp.netvs2010中怎么使用efcodefirst?
asp.netvs2010中怎么使用efcodefirst
移除的EdmMetadata表:
如果你允許簡(jiǎn)單地運(yùn)行程序來(lái)通過(guò)CodeFirst創(chuàng)建數(shù)據(jù)庫(kù)(即沒(méi)有顯式啟用遷移),那么,就會(huì)獲得作為遷移一部分特性的,數(shù)據(jù)庫(kù)架構(gòu)生成的好處。
修復(fù)了GetDatabaseValues:
在早期版本中,如果你的entity和context沒(méi)有定義在同一個(gè)命名空間中,這個(gè)方法調(diào)用就會(huì)失敗,這個(gè)問(wèn)題已經(jīng)被修復(fù),使用GetDatabaseValues不再需要定義在同一個(gè)命名空間下。
修復(fù)了對(duì)DbSet名字中Unicode字符的支持:
在早期版本中,當(dāng)在一個(gè)名字中包含有Unicode字符的DbSet中進(jìn)行查詢的時(shí)候,會(huì)導(dǎo)致異常,這個(gè)問(wèn)題已經(jīng)被修復(fù)了。
在非公共屬性上的數(shù)據(jù)標(biāo)注問(wèn)題:
默認(rèn)情況下,asp.netCodeFirst不會(huì)包含私有的,保護(hù)的,或者internal的屬性,即使在你的模型中手工包含的情況下。在早期的版本中使用FluentAPI將會(huì)忽略這類成員上的任何數(shù)據(jù)標(biāo)注。這個(gè)問(wèn)題已經(jīng)被修復(fù),現(xiàn)在CodeFirst將會(huì)處理在模型中手工定義的私有、保護(hù)、內(nèi)部的成員了。
更多的配置設(shè)置:
安裝EF4.3
工具->程序包管理器->程序包管理器控件臺(tái)(需要NuGet更新到最新)
鍵入安裝EF的命令I(lǐng)nstall-PackageEntityFramework(升級(jí)EF的命令'Update-PackageEntityFramework')
由實(shí)體生成/更新數(shù)據(jù)庫(kù)表
1.編寫(xiě)實(shí)體類
namespaceTestDb { publicclassTestDbContext:DbContext { //publicTestDbContext():base("TestDbContext"){}//TestDbContext是配置里的數(shù)據(jù)庫(kù)連接名稱,默認(rèn)為DbContext的名字:TestDbContext publicDbSetBooks{get;set;} } publicclassBook { publicintBookId{get;set;} [MaxLength(200)] publicstringTitle{get;set;} publicdoublePrice{get;set;} [MaxLength(60)] publicStringNote5{get;set;} [NotMapped] publicStringNotMappedTest{get;set;} } }
2.在程序包管理器控件臺(tái)啟用遷移Enable-Migrations(如果已經(jīng)存在需要加上-Force),常用部分參數(shù)如下(get-helpEnable-Migrations-detailed獲取幫助):
-ProjectName:""指定項(xiàng)目
-Force如存在則覆蓋遷移配置(已經(jīng)運(yùn)行過(guò)Enable-Migrations生成了配置)
3.新建遷移點(diǎn)Add-MigrationBook-ISBN(Book-ISBN是任意一個(gè)名稱標(biāo)記,遷移點(diǎn)名稱),常用部分參數(shù)如下(get-helpAdd-Migration-detailed獲取幫助):
-ProjectName:""指定項(xiàng)目
-Force如存在則覆蓋可以參考http://www.52mvc.com
4.更新到數(shù)據(jù)庫(kù)Update-Database或者Update-Database–Verbose(Verbose顯示詳細(xì)信息),常用部分參數(shù)如下(get-helpupdate-database-detailed獲取幫助):
-ProjectName:""指定項(xiàng)目
-Script生成遷移sql語(yǔ)句,如Update-Database-Script生成更新的遷移sql,不執(zhí)行掛起的操作
-SourceMigration:"開(kāi)始遷移點(diǎn)"只能與-Script一起使用,如Update-Database-Script-SourceMigration:$InitialDatabase表示生成全部的遷移sql
-TargetMigration:"結(jié)束遷移點(diǎn)"回溯到某個(gè)遷移點(diǎn),“0”表示回到空數(shù)據(jù)庫(kù)
-ConnectionStringName:"配置里的數(shù)據(jù)庫(kù)連接名稱"指定數(shù)據(jù)庫(kù),這樣不用修改代碼就可實(shí)現(xiàn)更新到新的數(shù)據(jù)庫(kù)
生成的遷移文件
當(dāng)運(yùn)行Add-MigrationBook-ISBN命令后生成的遷移程序如下:
namespaceEdmDb.Migrations { usingSystem.Data.Entity.Migrations; publicpartialclassreName3:DbMigration { publicoverridevoidUp() { AddColumn("Books","Note3",c=>c.String(maxLength:60)); AlterColumn("Books","Title",c=>c.String(maxLength:200)); DropColumn("Books","Note2"); Sql(this.Des("Books","Title","你好"));//手動(dòng)添加,增加數(shù)據(jù)庫(kù)注釋 } publicoverridevoidDown() { AddColumn("Books","Note2",c=>c.String(maxLength:60)); AlterColumn("Books","Title",c=>c.String()); DropColumn("Books","Note3"); } } }
Des方法,添加數(shù)據(jù)庫(kù)注釋,這樣做還要手動(dòng)添加注釋的語(yǔ)句,如果可以修改Add-Migration的處理方式就好了。
publicstaticclassDbMigrationExt { publicstaticstringDes(thisDbMigrationmig,stringtableName,stringcolName,stringDesStr) { stringsqlStr="EXECsys.sp_addextendedproperty@name=N'MS_Description'" +",@value=N'"+DesStr+"',@level0type=N'SCHEMA',@level0name=N'dbo',@level1type=N'TABLE'" +",@level1name=N'"+tableName+"',@level2type=N'COLUMN',@level2name=N'"+colName+"'"; returnsqlStr; } }
注意刪除數(shù)據(jù)庫(kù)所有表要重建的時(shí)候,需要?jiǎng)h除系統(tǒng)表__MigrationHis,__MigrationHis表記錄了遷移的日志,Add-Migration是檢查_(kāi)_MigrationHis確認(rèn)數(shù)據(jù)庫(kù)狀態(tài)的。
關(guān)于“asp.net vs2010中如何使用ef code first”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。