Entity Framework Code First 实例

1.创建一个控制台应用程序
2.创建Model

public class Blog 
{ 
    public int BlogId { get; set; } 
    public string Name { get; set; } 

    public virtual List<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int PostId { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 

    public int BlogId { get; set; } 
    public virtual Blog Blog { get; set; } 
}

3.创建一个 Context
在创建Context之前先在NuGet包中增加对EntityFramework 包的引用。

public class BloggingContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 
}

这时,VS自动补全一个命名空间:using System.Data.Entity;

此时完整的代码清单如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.Entity; 

namespace CodeFirstNewDatabaseSample 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
        } 
    } 

    public class Blog 
    { 
        public int BlogId { get; set; } 
        public string Name { get; set; } 

        public virtual List<Post> Posts { get; set; } 
    } 

    public class Post 
    { 
        public int PostId { get; set; } 
        public string Title { get; set; } 
        public string Content { get; set; } 

        public int BlogId { get; set; } 
        public virtual Blog Blog { get; set; } //virtual 关键字是为了开启懒加载
    } 

    public class BloggingContext : DbContext 
    { 
        public DbSet<Blog> Blogs { get; set; } 
        public DbSet<Post> Posts { get; set; } 
    } 
}

4.读取和添加数据

static void Main(string[] args) 
    { 
        using (var db = new BloggingContext()) 
        { 
            // 新建一个博客
            Console.Write("Enter a name for a new Blog: "); 
            var name = Console.ReadLine(); 

            var blog = new Blog { Name = name }; 
            db.Blogs.Add(blog); 
            db.SaveChanges(); 

            // 在blogs中显示所有的名字
            var query = from b in db.Blogs 
                        orderby b.Name 
                        select b; 

            Console.WriteLine("All blogs in the database:"); 
            foreach (var item in query) 
            { 
                Console.WriteLine(item.Name); 
            } 

            Console.WriteLine("Press any key to exit..."); 
            Console.ReadKey(); 
        } 
    } 

此时可以运行程序了。

运行程序之后,有个问题:我的数据在哪里?
此时的codefirst自动创建了一个数据库,放置在vs集成的LocalDB中。
关于LocalDB的介绍:http://blog.csdn.net/z767327552/article/details/78019474

LocalDB

打开即可看见code first已经帮我们建好了所有的一切。
5.修改Model
model的修改我们使用Code First Migrations进行操作。
此时打开

nuget管理器cmd

选择一下
这里写图片描述

开启Code First Migrations,输入命令:Enable-Migrations
注意此时项目中就会多出一个文件夹:

这里写图片描述

注意文件夹中的Configuration类,稍微观察一下此类即可。

在Model Blog中增加一个属性:

    public class Blog
    {
        public int BlogId { get; set; }
        public string Name { get; set; }
        public string Url { get; set; } //新增的属性
        public virtual List<Post> Posts { get; set; }  

    }

然后在nuget包的cmd中输入命令:Add -Migration ‘AddUrl’
此时就会在Migrations文件夹下会多出一个类:201709180748136_AddUrl
但是并没有更新到数据库中。

在nuget包cmd中输入命令:Update-Database
执行此命令之后,LocalDB下自然会更新相应的字段。

6.新增一个Model

    public class User
    {
       //此处的key为其注解,标识主键,在此空间下 System.ComponentModel.DataAnnotations;
        [Key]  
        public string UserName { get; set; }
        public string DisplayName { get; set; }
    }
    //新增model注意在BlogContext中相应的添加一个DbSet
        public class BlogContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
        public DbSet<User> Users { get; set; }
    }

同Model的修改。
然后在nuget包的cmd中输入命令:Add-Migration AddUser
此时就会在Migrations文件夹下会多出一个类:201709180751590_AddUser
但是并没有更新到数据库中。

在nuget包cmd中输入命令:Update-Database
执行此命令之后,LocalDB下自然会增加相应的model
7.Fluent API
fluent API 是一种更高级的指定模型配置的方式,它能做数据注解的事,还能做到更灵活的配置(在某些地方无法使用注解的时候)。数据注解和fluent API可以同时使用。

使用fluent API需要override此OnModelCreating 方法。
如下例子,我们更名displayname为display_name。

    public class BlogContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
        public DbSet<User> Users { get; set; }
        //  fluent API 的使用   
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<User>()
                .Property(u => u.DisplayName)
                .HasColumnName("display_name");
        }
    }

使用nuget包中cmd:
Add-Migration ChangeDisplayName
Update-Database
使其更改到数据库中。

总结:基本使用便是data annotations和Fluent API以及一个nuget包中的cmd使用。
原文链接:https://msdn.microsoft.com/en-us/library/jj193542(v=vs.113).aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值