本篇简单的了解下Code First
CodeFirst是Entity Framework 开发的第三种方式。既然是Code Frist ,就是要先code ,不同于Entity Data Model 用拖拉的方式产生实体。
本篇还以上一篇的blog为例
首先创建一个控制台应用程序,使用Nuget为项目添加Entity Framework的引用
建立User Entity,Blog Entity ,Post Entity ,Comment Entity
代码如下:
public class User { [Key] public int UserId { get; set; } [StringLength(20)] public string UserName { get; set; } public ICollection<Post> Posts { get; set; } public ICollection<Comment> Comments { get; set; } }
注意引用
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public class Blog { [Key] public int BlogId { get; set; } public string Url { get; set; } public string Name { get; set; } public virtual User User { get; set; } public ICollection<Post> Posts { get; set; } }
public class Post { [Key] public int PostId { get; set; } [Required] [StringLength(100)] public string Title { get; set; } public virtual User User { get; set; } public int UserId { get; set; } public virtual Blog Blog { get; set; } public ICollection<Comment> Comments { get; set; } }
public class Comment { [Key] public int CommentId { get; set; } public string Content { get; set; } public virtual Post Post { get; set; } public int PostId { get; set; } public virtual User User { get; set; } }
为了让EF框架能够找到这些类,需要使用EF框架的context来服务、管理和持久化数据至数据库。EF框架有两种context工具可供选择,一个是ObjectContext,这一工具从EF第一次发布就一直是EF框架的一部分,而随着EF4.1的发布,伴随Code First推出轻量级的DbContext。两种工具都可选用,但更通用(推荐)的是使用新的DbContext,也就是我们马上就要使用的。
编写BlogContext类继承自DbContext,获得DbContext的所有功能。除此之外,还需要返回user、blog、post、comment类的可查询数据集DbSets ,以暴露类中的属性
public class BlogContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<Post> Posts { get; set; } public DbSet<Blog> Blogs { get; set; } public DbSet<Comment> Comments { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }
配置连接字符串
<connectionStrings> <add name="BlogEntity" connectionString="Data Source=localhost;Initial Catalog=BlogEntity;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings>
static void Main(string[] args) { using (var db = new BlogContext()) { db.Users.Add(new User { UserName="ian.w"}); db.SaveChanges(); db.Blogs.Add(new Blog { Name="ian.w的博客", Url="www.ian.com",User=db.Users.Find(1)}); db.SaveChanges(); db.Posts.Add(new Post { UserId=1, Title="entity framework code first", Blog=db.Blogs.FirstOrDefault()}); db.SaveChanges(); db.Comments.Add(new Comment { Content="content",User=null, PostId=1}); db.SaveChanges(); } }