Entity Framework 学习 Code First(1)

本篇简单的了解下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();
    }
}

 

 

 

posted @ 2012-08-03 15:32  Ian.w  阅读(561)  评论(0编辑  收藏  举报