zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    Oracle中的带参数的视图--我们致力于打造人力资源软件
    (免费)在线演示人力资源管理系统--源自偕行软件
    打造国内第一个支持在线演示的人力资源管理系统--源自偕行软件
    Silverlight C1.Silverlight.FlexGrid 表格动态列
    SILVERLIGHT 多维表头、复杂表头 MULTIPLE HEADER
    weixin JS 接口调用代码
    盒布局
    焦点不在input或textarea中,屏蔽回格按钮
    CSS3多栏布局
    AJAX
  • 原文地址:https://www.cnblogs.com/whx1973/p/2619867.html
Copyright © 2011-2022 走看看