您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關asp.net vs2010中如何使用ef code first,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
EF4.3中主要的新特性,允許通過CodeFirst創建的數據庫可以與你的代碼模型一起增量進化。下面億速云小編來講解下asp.netvs2010中怎么使用efcodefirst?
asp.netvs2010中怎么使用efcodefirst
移除的EdmMetadata表:
如果你允許簡單地運行程序來通過CodeFirst創建數據庫(即沒有顯式啟用遷移),那么,就會獲得作為遷移一部分特性的,數據庫架構生成的好處。
修復了GetDatabaseValues:
在早期版本中,如果你的entity和context沒有定義在同一個命名空間中,這個方法調用就會失敗,這個問題已經被修復,使用GetDatabaseValues不再需要定義在同一個命名空間下。
修復了對DbSet名字中Unicode字符的支持:
在早期版本中,當在一個名字中包含有Unicode字符的DbSet中進行查詢的時候,會導致異常,這個問題已經被修復了。
在非公共屬性上的數據標注問題:
默認情況下,asp.netCodeFirst不會包含私有的,保護的,或者internal的屬性,即使在你的模型中手工包含的情況下。在早期的版本中使用FluentAPI將會忽略這類成員上的任何數據標注。這個問題已經被修復,現在CodeFirst將會處理在模型中手工定義的私有、保護、內部的成員了。
更多的配置設置:
安裝EF4.3
工具->程序包管理器->程序包管理器控件臺(需要NuGet更新到最新)
鍵入安裝EF的命令Install-PackageEntityFramework(升級EF的命令'Update-PackageEntityFramework')
由實體生成/更新數據庫表
1.編寫實體類
namespaceTestDb { publicclassTestDbContext:DbContext { //publicTestDbContext():base("TestDbContext"){}//TestDbContext是配置里的數據庫連接名稱,默認為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(如果已經存在需要加上-Force),常用部分參數如下(get-helpEnable-Migrations-detailed獲取幫助):
-ProjectName:""指定項目
-Force如存在則覆蓋遷移配置(已經運行過Enable-Migrations生成了配置)
3.新建遷移點Add-MigrationBook-ISBN(Book-ISBN是任意一個名稱標記,遷移點名稱),常用部分參數如下(get-helpAdd-Migration-detailed獲取幫助):
-ProjectName:""指定項目
-Force如存在則覆蓋可以參考http://www.52mvc.com
4.更新到數據庫Update-Database或者Update-Database–Verbose(Verbose顯示詳細信息),常用部分參數如下(get-helpupdate-database-detailed獲取幫助):
-ProjectName:""指定項目
-Script生成遷移sql語句,如Update-Database-Script生成更新的遷移sql,不執行掛起的操作
-SourceMigration:"開始遷移點"只能與-Script一起使用,如Update-Database-Script-SourceMigration:$InitialDatabase表示生成全部的遷移sql
-TargetMigration:"結束遷移點"回溯到某個遷移點,“0”表示回到空數據庫
-ConnectionStringName:"配置里的數據庫連接名稱"指定數據庫,這樣不用修改代碼就可實現更新到新的數據庫
生成的遷移文件
當運行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","你好"));//手動添加,增加數據庫注釋 } publicoverridevoidDown() { AddColumn("Books","Note2",c=>c.String(maxLength:60)); AlterColumn("Books","Title",c=>c.String()); DropColumn("Books","Note3"); } } }
Des方法,添加數據庫注釋,這樣做還要手動添加注釋的語句,如果可以修改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; } }
注意刪除數據庫所有表要重建的時候,需要刪除系統表__MigrationHis,__MigrationHis表記錄了遷移的日志,Add-Migration是檢查__MigrationHis確認數據庫狀態的。
關于“asp.net vs2010中如何使用ef code first”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。