• EF框架step by step(3)—Code-First


     CodeFirst是EF框架的第三种方式,也是最为复杂一种方式,本文将以EF4.1版本为基础,简要讲解一下用法,同时,也介绍DbContext的用法。

    本文采用的示例仍然是前两篇采用的博客用户的示例。故不在此对业务进行描述。

    首先新建一个C#控制台应用程序,并命名为EFCodeFirstSample。
    利用Nuget为该项目添加引用Entity Framework4.1的引用。
    PM> Install-Package EntityFramework
    当然,你也可以用常规的方式,先下载EF4.1安装后,在进行添加。
    同时代码中引用命名空间
    using System.Data.Entity;

    第二步:为项目添加2个实体对象,仍然采用前面所描述过的博客用户及随笔类,代码如下示:

    复制代码
        public partial class BlogUser
    {
    /// <summary>
    /// 默认情况下属性被命名为ID、id或者[ClassName]Id,将映射为数据表中的主键
    /// 如果没有类似的命名,并且也未显示指明主键,则生成失败,引发异常
    /// </summary>
    public int BlogUserId { get; set; }
    public string BlogName { get; set; }
    /// <summary>
    /// 定义博客用户的随笔列表
    /// virtual表示该列表为延迟加载
    /// </summary>
    public virtual ICollection<Post> Posts { get; set; }
    }

    public partial class Post
    {
    public int PostId { get; set; }
    public string PostTitle { get; set; }
    public int BlogUserId { get; set; }
    /// <summary>
    /// 延迟加载博客用户
    /// </summary>
    public virtual BlogUser BlogUser { get; set; }
    }
    复制代码

    第三步:定义DbContext

     

    复制代码
       public class BlogDbContext : DbContext
    {

    public IDbSet<BlogUser> BlogUsers { get; set; }
    public IDbSet<Post> Posts { get; set; }

    }
    复制代码

    第四步:编写测试代码

    复制代码
                using (var db = new BlogDbContext())
    {
    //向数据库添加记录
    var blogUser = new BlogUser() { BlogUserId = 1, BlogName = "燕赤霞" };
    db.BlogUsers.Add(blogUser);
    var post = new Post() { PostId = 1,
    PostTitle = "一切皆有可能--我与小倩不得不说的事",
    BlogUserId = 1 };
    db.Posts.Add(post);

    //保存记录,返回受影响的行数
    int recordsAffected = db.SaveChanges();
    Console.WriteLine("追加{0}记录成功", recordsAffected);
    }
    复制代码
    好了,写到这里可以运行测试了,运行结果如下:


    你可以打开数据库管理器,可以找到
    EFCodeFirstSample.BlogDbContext 数据库,他包含BlogUsers表和Posts表,并且建立了主外键关系


    完整代码如下:
    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations;

    namespace CodeFirstSample
    {
    class Program
    {
    static void Main(string[] args)
    {

    using (var db = new BlogDbContext())
    {
    //向数据库添加记录
    var blogUser = new BlogUser() { BlogUserId = 1, BlogName = "燕赤霞" };
    db.BlogUsers.Add(blogUser);
    var post = new Post() { PostId = 1,
    PostTitle = "一切皆有可能--我与小倩不得不说的事",
    BlogUserId = 1 };
    db.Posts.Add(post);

    //保存记录,返回受影响的行数
    int recordsAffected = db.SaveChanges();
    Console.WriteLine("追加{0}记录成功", recordsAffected);
    }
    }
    }




    public partial class BlogUser
    {
    /// <summary>
    /// 默认情况下属性被命名为ID、id或者[ClassName]Id,将映射为数据表中的主键
    /// 如果没有类似的命名,并且也未显示指明主键,则生成失败,引发异常
    /// </summary>
    public int BlogUserId { get; set; }
    public string BlogName { get; set; }
    /// <summary>
    /// 定义博客用户的随笔列表
    /// virtual表示该列表为延迟加载
    /// </summary>
    public virtual ICollection<Post> Posts { get; set; }
    }

    public partial class Post
    {
    public int PostId { get; set; }
    public string PostTitle { get; set; }
    public int BlogUserId { get; set; }
    /// <summary>
    /// 延迟加载博客用户
    /// </summary>
    public virtual BlogUser BlogUser { get; set; }
    }


    public class BlogDbContext : DbContext
    {
    public IDbSet<BlogUser> BlogUsers { get; set; }
    public IDbSet<Post> Posts { get; set; }


    }

    }
    复制代码
  • 相关阅读:
    【和我一起学习Unity3D】Unity3D的坐标控制
    android开发利器--站在巨人肩膀上前行
    Ubuntu输入password登陆后又跳回到登录界面
    Leetcode:Swap Nodes in Pairs 单链表相邻两节点逆置
    Android Home键监听
    Android 6.0 中TimePicker显示为滚动样式的方法
    Android Calendar的运用
    Android中Calendar类的用法总结
    Androlid入门之文件系统操作(三)文件读写
    Android入门之文件系统操作(二)文件操作相关指令
  • 原文地址:https://www.cnblogs.com/Alex80/p/5141082.html
Copyright © 2020-2023  润新知