Entity Framework推出已经有一段时间了,CodeFirst是跟着EF4一起推出的一项技术。
以前我也有用EF来快速建立数据持久层,不过采用的是DBFirst,最近打算学习一下CodeFirst的使用,看了不少园子中各位达人的文章,也看了几集MSDN上的英文视频教程(视频的确很不错的说,推荐大家也去看一下),稍微有一点心得,现在跟各位朋友分享一下。希望各位园子中的朋友不吝赐教,一起学习进步。
我还是第一次写技术类博客(处女作?),如果写得不合大家心意的话还望见谅。
言归正传:
我们这节讨论的问题如下:
1、简单的介绍一下什么是CodeFirst
2、如何简单快速的部署EF
3、一个EF CodeFirst的简单应用实例
代码可以点击这里下载
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已经简单的讲解完毕。
下一节,我们讨论:
如果我们的数据实体需要发生变化,比如添加一个新的数据库实体,或者在已有的实体中添加/修改字段,我们需要怎么做?难道需要把数据库删掉,然后重新生成?
答案当然是:呵呵~~~