asp.net vs2010中如何使用ef code first
创始人
2024-12-19 02:42:10
0次

  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确认数据库状态的。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...