Net开发人员可以拥抱Entity Framework 了(EF4.3 Release!!!)

Net开发人员可以拥抱Entity Framework 了(EF4.3 Release!!!)
数据库迁徙 这是EF4.3中最重要的新特性这样我们就能将精力集中在程序员喜欢做的事情上写简单传统的CLR实体Plain Old CLR Object而不是写SQL语句去维护数据库想添加一个字段就添加想删除就删除想修改名字就修改是不是很爽2. 删除了EdmMetadata表这个表就是一个半成品用CodeFirst根本不会用这个表去维护数据库因为有了数据库迁徙功能数据库的结构信息能够自动生成因此这个表就是多余的了。3. 非Public字段上也可以添加数据描述属性了以前默认情况下Code First 会忽略private、protected和internal字段上的属性信息即使你写代码将这些字段包含到你的模型里面通过Fluent API这些字段上的属性信息也会被忽略。在这个版本中如果你通过Fluent API将这些非Public字段加入你的模型所有属性信息都能起作用了。4. 能够在配置文件中进行更多的设置 在App/Web.config 文件中能针对Code First方式进行更多的配置比如设置默认的数据库的Connection Factory和数据库初始化器甚至可以在配置文件中设置实体对象的构造函数参数。更多的配置信息可以在官方博客中找到。5. 修改了一系列的Bug包括Unicode的DbSet名称等等。2. 轻而易举维护数据库下载下面示例代码2.1 环境配置名称说明VS2010因为要用NuGetNuGet数据库迁徙用到了NuGet的命令行工具NuGet是非常有用的工具如果还没有用过这个工具可以百度一下也可以去开源社区了解和学习最好升级到最新版本我是1.6。EF4.3这个可以直接用NuGet安装并引用到你的项目中。如果你安装过beta版本相信你也会用NuGet的命令工具升级 Update-Package EntityFramework2.2 最简单的应用尝试软件开发是一个迭代增量的过程没有人能够一开始就完全设计好数据模型因此对于Code First来说最常见的开发场景是随着功能需求不断完善我们的数据模型。下面开始一步一步尝试数据库迁徙功能。在示例中我用Asp.net MVC3项目首先新建一个项目选择空模板默认情况会引用一个EntityFramework但很可能是4.1版本删除这个引用我们用NuGet将4.3版本的EF引入MVC3中当然你也可以通过命令行的方式打开NuGet的Package Management ConsolePMCPM Install-package EntityFramework假设我们要建立的是一个网上书店首先我们通过Code First建立我们的模型public class BookContext : DbContext { public DbSetBook Books { get; set; } } public class Book { public int BookId { get; set; } public string Title { get; set; } public double Price { get; set; } }非常简单的模型下一步是在我们网站上使用这个模型将书以列表的方式显示出来第一步添加HomeControllerpublic class HomeController : Controller { public ActionResult Index() { BookContext db new BookContext(); db.Books.Add(new Book { Title Think in C, Price 59 }); db.SaveChanges(); return View(db.Books.ToList()); } }第二步添加对应的Viewmodel ListMigarationDemo.Models.Book { ViewBag.Title 网上书店; } h2书店里面有以下书籍/h2 ul { foreach (var item in Model) { li书名 item.Title/li } } /ul然后F5你就应该在浏览器里面看到下面的结果我们什么也没干一个简单的网站就完成了是不是很神奇我们甚至没有配置数据库连接字符串。这都是因为EF设计的原则是“约定好于配置” Convention Over Configuration默认情况下EF找你本机上的SqlExpress数据库因为我机器上有这个数据库所以EF就能自动连接数据库然后根据上面的数据模型生成对应的数据库如果到这里一切都正常让我们进入正题使用EF4.3中的Migaration功能第一步修改我们的模型由于新的需求每本书还应该有一个ISBN编号public class Book { public int BookId { get; set; } public string Title { get; set; } public double Price { get; set; } public string ISBN { get; set; } }如果这时候你按F5运行系统会出现非法操作异常“The model backing the BookContext context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId238269).” 提示我们应该进行数据库迁移。很简单只需要在PMC中执行下面3个命令1. Enable-Migrations2. Add-Migration Book-ISBN Book-ISBN是任意一个名称标记用来标记一个迁移点3. Update-Database如果执行完上面三个命令并且一切顺利恭喜你数据库升级完成你应该在项目里面看到并且数据库已经变成这时候F5运行系统应该一切正常了你可以尝试在Controller中加入另外一条记录我加入了db.Books.Add(new Book { Title Think in C Volumne Two: Practical Programming, Price 59, ISBN 978-7-111-17115-7 });因此看到的是到此为止我们已经一步一步完成了最简单的数据库迁徙/升级, 在上面生成的Migarations文件夹中主要一个配置文件和一个数据库迁移文件数据库迁移文件有两个函数一个是Up即升级数据库一个事Down即回溯数据库去看看生成的代码很容易理解它干了什么。2.3 自定义数据库变更规则虽然EF能够自动根据数据模型生成对应的数据库结构但是通常自动生成的数据库只是最基本的通常我们需要设置更多的属性。比如上面的Book数据模型默认的数据库是以BookId这个主键建立索引可是我们还希望以Title建立索引这样我们能够快速的根据书名查找。另外上面示例中添加ISBN字段后已经有了的数据默认是Null这会在程序中引起不必要的麻烦我们假设希望已有的记录的ISBN是000-0-000-00000-0。面对上面这些需求我们首先通过下面命令新建一个迁徙Add-Migration IndexTitleAndDefault在项目树的Migrations文件夹下面会生成一个新的cs文件我的是201202191349250_IndexTitleAndDefault.cs注意前面时间戳会不一样。然后修改生成的迁移文件public partial class IndexTitleAndDefault : DbMigration { public override void Up() { AlterColumn(Books, Title, c c.String(nullable: false,maxLength:100)); CreateIndex(Books, Title, true,Index_Title); AlterColumn(Books, ISBN, c c.String(nullable: false, defaultValue: 000-0-000-00000-0)); } public override void Down() { DropIndex(Books, Index_Title); } }最后执行命令Update-Database数据库应该建立了Title的索引并且ISBN的默认值是000-0-000-00000-0。2.5 版本回溯和Sql脚本生成上面所有操作都是更新到最新的版本但有时候我们希望数据库能回溯到以前的版本这在以前手动维护数据库时候是比较困难的而EF4.3提供的数据库变迁特性能很方便的进行回溯