溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

asp.net vs2010中如何使用ef code first

發(fā)布時(shí)間:2021-03-09 16:15:17 來(lái)源:億速云 閱讀:175 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(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)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI