zoukankan      html  css  js  c++  java
  • 初识Entity Framework CodeFirst(1)

    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已经简单的讲解完毕。


    下一节,我们讨论:

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

    答案当然是:呵呵~~~

  • 相关阅读:
    INF文件的语法解说转
    VC的拨号上网程序
    sql修复
    flash media server 2 下载 + 无限制序列号
    [原] ASPNET2.0中如何历遍GRIDVIEW
    [net2.0] ASPNET内置安全认证架构 的灵异问题~~~~
    SnagIt的Visual Studio Team System插件
    [翻译]使用HtmlAgilityPack更好的HTML分析和验证
    哪些自动化测试工具支持AJAX
    VSTT Rosario CTP
  • 原文地址:https://www.cnblogs.com/xiaodiejinghong/p/2979469.html
Copyright © 2011-2022 走看看