出自:http://kb.cnblogs.com/page/97003/ Entity framework :database-first,code-first, model-first 这三个有什么不同? EF4.1有三种方式来进行数据操作及持久化。分别是:Database-First,Model-First,Code-first: 1.Database First是基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。 2.Model First 这种方式是先利用某些工具(如VS的EF设计器)设计出实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。 3.Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象,这种方式在前一篇文章已经简单说过了。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。 建议看看这几篇文章: EF框架step by step(1)—Database-First EF框架step by step(2)—Model-First EF框架step by step(3)—Code-First 6. 修改Model后,自动更新数据表 当我们修改了Model后,运行网站时,会报错,因为EF现在不能把更新后的Model和旧数据表对应起来。为了使数据库随着Model的更新而更新,我们还要做以下的工作。 打开根目录下的Global.asax文件。 添加如下命名空间(注意:EFCodeFirst 1.0 和 0.8 对于 DataBase 类所在的命名空间不同) using System.Data.Entity; using Blog.Models; 新建一个BlogDBInitializer类,使他继承DropCreateDatabaseIfModelChanges<BlogDB>,重写Seed函数。 public class BlogDBInitializer : DropCreateDatabaseIfModelChanges<BlogDB> { protected override void Seed(BlogDB context) { base.Seed(context); var links = new List<FriendLink> { new FriendLink{ Name="NinoFocus.com", URL=@"http://ninofocus.com", Description="NinoFocus的个人博客" }, new FriendLink{ Name="NinoFocus at CNBlogs", URL=@"http://www.cnblogs.com/nizhuguo", Description="NinoFocus在博客园的博客" } }; links.ForEach(l => context.FriendLinks.Add(l)); context.SaveChanges(); } } 向Application_Start()中,添加如下代码: database.setinitialize{new ..dbinitializer()}; ..db 为数据类名称 每次重建数据库后,数据库中的数据都是被清空。而Seed()函数的作用就是向新的数据库中添加以下初始化数据。 如上面的代码我添加了两个友情链接。