您的位置:首页 > 其它

Entity Framework Code First 实例

2017-09-18 16:49 295 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  entity framework