• 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表,并且建立了主外键关系


    完整代码如下:

    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; }


    }

    }


    复制代码
    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; }


    }

    }

    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; }


    }

    }

  • 相关阅读:
    Lazarus教程 中文版后续给出
    QBASIC教程
    Object Pascal中文手册 经典教程
    Pascal 基础教程
    Delphi中的关键字与保留字
    Pascal数据结构与算法
    Pascal小游戏 贪吃蛇
    Pascal小游戏 俄罗斯方块怀旧版
    Pascal ASCII和文本的转换
    IDEA安装问题解决
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/5127588.html
Copyright © 2020-2023  润新知