新建.NET CORE CONSOLE控制台项目NetCoreConsole,管理NuGet程序包种添加一下引用
//Microsoft.EntityFrameworkCore //EFCore
//Microsoft.Extensions.Logging // 日志
//Microsoft.Extensions.Logging.Console // 日志输出到Console控制台
//Microsoft.Extensions.Logging.Debug // 日志输出到调试Debug
//Microsoft.EntityFrameworkCore.Proxies// 懒加载,延迟加载,EFCore没有懒加载,使用该库,可以实现懒加载
//Microsoft.EntityFrameworkCore.SqlServer//EFCore使用的SqlServer数据库
//Pomelo.EntityFrameworkCore.MySql//EFCore使用的MySql数据库
项目代码如下:
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using System.Linq;
using System.Diagnostics;
using Microsoft.EntityFrameworkCore.Storage;
//Microsoft.EntityFrameworkCore //EFCore
//Microsoft.Extensions.Logging // 日志
//Microsoft.Extensions.Logging.Console // 日志输出到Console控制台
//Microsoft.Extensions.Logging.Debug // 日志输出到调试Debug
//Microsoft.EntityFrameworkCore.Proxies// 懒加载,延迟加载,EFCore没有懒加载,使用该库,可以实现懒加载
//Microsoft.EntityFrameworkCore.SqlServer//EFCore使用的SqlServer数据库
//Pomelo.EntityFrameworkCore.MySql//EFCore使用的MySql数据库
namespace NetCoreConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("测试 EF core ");
BlogContext blogContext = new BlogContext();
#region ef 数据库的创建和删除
//Console.WriteLine("删除数据库");
//blogContext.Database.EnsureDeleted();
//Console.WriteLine("添加数据库");
blogContext.Database.EnsureCreated();
//Console.WriteLine("添加数据库成功");
#endregion
#region 数据迁移相关
//IEnumerable vs = blogContext.Database.GetMigrations();
//blogContext.Database.GetPendingMigrations();
//blogContext.Database.GetAppliedMigrations();
//blogContext.Database.Migrate();
//Console.WriteLine("添加数据库成功");
#endregion
#region 预先加载,懒加载
//预先加载(贪婪加载,饥饿加载,一次行加载所有)
//var list = blogContext.Blog.Include(op => op.Posts).ThenInclude(op => op.Author).ToList();
//var list = blogContext.Blog.Include(op => op.Posts).ThenInclude(op => op.Author).ToList();
//var list = blogContext.Blog.Include(op => op.Posts).ThenInclude(op => op.Author).ToList().AsQueryable();
//foreach (var item in list)
//{
// Console.WriteLine($"blog:{item}");
// foreach (var it in item.Posts)
// {
// Console.WriteLine($"Posts:{it.Title}");
// Console.WriteLine($"person:{it.Author.Name}");
// }
//}
//懒加载(延迟加载),又称按需加载,net ef core 默认时候没有懒加载的,
//ef是有的,ef core 要使用懒加载,需要使用proxy代理类UseLazyLoadingProxies,并且导航属性要添加Virtual标记
//optionsBuilder.UseLazyLoadingProxies()
#endregion
#region IQueryable和IEnumerable不同
//IQueryable和IEnumerable不同
//IQueryable和IEnumerable都是linq操作
//IQueryable和IEnumerable都是延迟执行,tolist的时候在执行
//只不过操作的位置不同,IQueryable是在数据库一侧操作,而IEnumerable实在应用程序的内存一侧操作,
//IQueryable继承IEnumerable,IQueryable与IEnumerable 可以相互转换,IQueryable.AsIEnumerable,IEnumerable.AsIQueryable
//var item = blogContext.Post.OrderBy(op => EF.Property