1、什么是CodeFirst
什么是CodeFirst,顾名思义,代码优先,这是相对于以往开发时,先通过业务分析,再建库建表,最后才对项目进行编码。CodeFirst就是先写代码和数据模型,再让EF通过数据模型生成DDL代码,建立数据库。
2、如何配置
首先,我们建立一个项目(我这里建立一个控制台程序)
右键点击解决方案,然后选择“管理NuGet程序包”
这里你会看到很多程序程序包,选择EntityFramework,点击安装。
系统会自动的帮你部署好EF,呵呵,很方便的说。
我们打开配置文件APP.Config看看,代码如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>
多了一些配置信息(从项目建立开始,我一直都没有动过配置文件),这些信息是EF部署的时候,系统自动帮你添加的,这里我采用的是VS2012自带的LocalDB,数据库的实例是mydb,所以,我只需要把“<parameter value="v11.0" />”中的V11.0改为mydb即可(这里无论是V11.0还是mydb都是数据库实例,不是具体的数据库名称,因为数据库等下是通过EF来自动帮我们生成的)
至此,我们EF CodeFirst就部署完毕啦。体会到了IDE的强大了吧~~
3、开始使用EF CodeFirst
这里,首先我建立两个Model(稍微抄袭一下MSDN上面的教程,实在是想不出建立个什么样的model好)
Model的代码如下:
class Blog { public int BlogID { get; set; } public string BlogName { get; set; } }
class Post { public int PostID { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogID { get; set; } public virtual Blog Blog { get; set; } }
再建立一个上下文,这里我们继承自DbContext(注意哟:这里需要引入程序集“System.Data.Entity”)
class BlogContext:DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } }
到这里,我们的EF CodeFirst基本上已经写完了,剩下的就是在program里面写一下调用的代码。
class Program { static void Main(string[] args) { using (var blogDb = new BlogContext()) { Console.Write("Enter a name for a new blog:"); var blogName = Console.ReadLine(); var blog = new Blog { BlogName = blogName }; blogDb.Blogs.Add(blog); blogDb.SaveChanges(); var result = from b in blogDb.Blogs select b; foreach (var item in result) { Console.WriteLine(item.BlogName); } } Console.ReadKey(); } }
运行程序:
看来没有什么问题,呵呵。我们再看看数据库:
可以看出,多了个叫做“CodeFirst_2013_3_23.BlogContext”(名字起的有点长)的数据库乖乖的躺在那里,而且表也建好了。
到这里为止,CodeFirst已经简单的讲解完毕。
下一节,我们讨论:
如果我们的数据实体需要发生变化,比如添加一个新的数据库实体,或者在已有的实体中添加/修改字段,我们需要怎么做?难道需要把数据库删掉,然后重新生成?
答案当然是:呵呵~~~