Entity Framework 学习 Code First(1)

本篇简单的了解下Code First

CodeFirst是Entity Framework 开发的第三种方式。既然是Code Frist ,就是要先code ,不同于Entity Data Model 用拖拉的方式产生实体。

本篇还以上一篇的blog为例

首先创建一个控制台应用程序,使用Nuget为项目添加Entity Framework的引用

Entity Framework 学习 Code First(1)

Entity Framework 学习 Code First(1)

 

建立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();
    }
}

 

 

 

转载于:https://www.cnblogs.com/whx1973/archive/2012/08/03/2619867.html