您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。