這篇文章將為大家詳細講解有關asp.net vs2010中如何使用ef code first,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
我們擁有10多年網(wǎng)頁設計和網(wǎng)站建設經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設計師為您提供的解決方案。為企業(yè)提供做網(wǎng)站、網(wǎng)站建設、微信開發(fā)、重慶小程序開發(fā)、移動網(wǎng)站建設、HTML5、等業(yè)務。無論您有什么樣的網(wǎng)站設計或者設計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設計服務并滿足您的需求。EF4.3中主要的新特性,允許通過CodeFirst創(chuàng)建的數(shù)據(jù)庫可以與你的代碼模型一起增量進化。下面創(chuàng)新互聯(lián)網(wǎng)站建設公司,小編來講解下asp.netvs2010中怎么使用efcodefirst?
asp.netvs2010中怎么使用efcodefirst
移除的EdmMetadata表:
如果你允許簡單地運行程序來通過CodeFirst創(chuàng)建數(shù)據(jù)庫(即沒有顯式啟用遷移),那么,就會獲得作為遷移一部分特性的,數(shù)據(jù)庫架構生成的好處。
修復了GetDatabaseValues:
在早期版本中,如果你的entity和context沒有定義在同一個命名空間中,這個方法調(diào)用就會失敗,這個問題已經(jīng)被修復,使用GetDatabaseValues不再需要定義在同一個命名空間下。
修復了對DbSet名字中Unicode字符的支持:
在早期版本中,當在一個名字中包含有Unicode字符的DbSet中進行查詢的時候,會導致異常,這個問題已經(jīng)被修復了。
在非公共屬性上的數(shù)據(jù)標注問題:
默認情況下,asp.netCodeFirst不會包含私有的,保護的,或者internal的屬性,即使在你的模型中手工包含的情況下。在早期的版本中使用FluentAPI將會忽略這類成員上的任何數(shù)據(jù)標注。這個問題已經(jīng)被修復,現(xiàn)在CodeFirst將會處理在模型中手工定義的私有、保護、內(nèi)部的成員了。
更多的配置設置:
安裝EF4.3
工具->程序包管理器->程序包管理器控件臺(需要NuGet更新到新)
鍵入安裝EF的命令Install-PackageEntityFramework(升級EF的命令'Update-PackageEntityFramework')
由實體生成/更新數(shù)據(jù)庫表
1.編寫實體類
namespaceTestDb { publicclassTestDbContext:DbContext { //publicTestDbContext():base("TestDbContext"){}//TestDbContext是配置里的數(shù)據(jù)庫連接名稱,默認為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.在程序包管理器控件臺啟用遷移Enable-Migrations(如果已經(jīng)存在需要加上-Force),常用部分參數(shù)如下(get-helpEnable-Migrations-detailed獲取幫助):
-ProjectName:""指定項目
-Force如存在則覆蓋遷移配置(已經(jīng)運行過Enable-Migrations生成了配置)
3.新建遷移點Add-MigrationBook-ISBN(Book-ISBN是任意一個名稱標記,遷移點名稱),常用部分參數(shù)如下(get-helpAdd-Migration-detailed獲取幫助):
-ProjectName:""指定項目
-Force如存在則覆蓋可以參考http://www.52mvc.com
4.更新到數(shù)據(jù)庫Update-Database或者Update-Database–Verbose(Verbose顯示詳細信息),常用部分參數(shù)如下(get-helpupdate-database-detailed獲取幫助):
-ProjectName:""指定項目
-Script生成遷移sql語句,如Update-Database-Script生成更新的遷移sql,不執(zhí)行掛起的操作
-SourceMigration:"開始遷移點"只能與-Script一起使用,如Update-Database-Script-SourceMigration:$InitialDatabase表示生成全部的遷移sql
-TargetMigration:"結束遷移點"回溯到某個遷移點,“0”表示回到空數(shù)據(jù)庫
-ConnectionStringName:"配置里的數(shù)據(jù)庫連接名稱"指定數(shù)據(jù)庫,這樣不用修改代碼就可實現(xiàn)更新到新的數(shù)據(jù)庫
生成的遷移文件
當運行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","你好"));//手動添加,增加數(shù)據(jù)庫注釋 } publicoverridevoidDown() { AddColumn("Books","Note2",c=>c.String(maxLength:60)); AlterColumn("Books","Title",c=>c.String()); DropColumn("Books","Note3"); } } }
Des方法,添加數(shù)據(jù)庫注釋,這樣做還要手動添加注釋的語句,如果可以修改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ù)庫所有表要重建的時候,需要刪除系統(tǒng)表__MigrationHis,__MigrationHis表記錄了遷移的日志,Add-Migration是檢查__MigrationHis確認數(shù)據(jù)庫狀態(tài)的。
關于“asp.net vs2010中如何使用ef code first”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。