2014/9/2 技术探讨

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看看,代码如下:

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>
复制代码
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

多了一些配置信息(从项目建立开始,我一直都没有动过配置文件),这些信息是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已经简单的讲解完毕。


下一节,我们讨论:

如果我们的数据实体需要发生变化,比如添加一个新的数据库实体,或者在已有的实体中添加/修改字段,我们需要怎么做?难道需要把数据库删掉,然后重新生成?

答案当然是:呵呵~~~

  [ Entity FrameWork ]   [ Code First ]
知识共享许可协议 本作品由小蝶惊鸿创作,采用知识共享署名 4.0 国际许可协议进行许可,转载时请保留本文署名及链接。