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