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
打开即可看见code first已经帮我们建好了所有的一切。
5.修改Model
model的修改我们使用Code First Migrations进行操作。
此时打开
选择一下
开启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