前言
Microsoft.EntityFrameworkCore 用于数据库保存和查询。
优点:1 一种代码适用于多种数据库类型如mysql,sql,sqlite等
2 对于复杂的表对应关系,可以简单写类关系,利用包控制台程序自动生产表创建方式,将类关系自动对应到表关系中,提升建表效率
3 数据查询也较方便
创建解决方案
新建控制台程序VS2019,win10系统,创建控制台程序,命名为Demo.App
添加包
选择最新net框架
新建类库Demo.Domain
在类库中创建以下三个类
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo.Domain
{
public class Player
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime DateOfBrith { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo.Domain
{
public class League
{
public int Id { get ;set; }
public string Name { get; set; }
public string Country { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo.Domain
{
public class Club
{
public Club()
{
Players = new List<Player>();
}
public int Id { get; set; }
public string Name { get; set; }
public string City { get; set; }
public DateTime DateOfEstablelishment { get; set; }
public string History { get; set; }
public League League { get; set; }
public List<Player> Players { get; set; }
}
}
按照下图添加所有包文件
新建类库Demo.Data
给类库添加以下引用包
添加项目引用Demo.Domain
添加类DemoContext
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using System.Text;
using Demo.Domain;
namespace Demo.Data
{
public class DemoContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//创建db文件地址
optionsBuilder.UseSqlite("Data Source=.." + "\\" + DateTime.Now.ToString("yyyy-MM") + ".db");
}
public DbSet<Player> Players { get;set;}
public DbSet<League> Leagues { get; set; }
public DbSet<Club> Clubs { get; set; }
}
}
设置最新目标框架2.1
打开NUG控制台程序
选择项目Demo.Data,写入Add-Migration InitalData并回车
在项目中生成迁移文件夹Migrations
文件夹中包含两个文件
创建数据库表以及插入和查询
在Demo.App中添加代码
using System;
using Demo.Data;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Infrastructure;
using System.Linq;
using Demo.Domain;
namespace Demo.App
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
using (DemoContext context = new DemoContext ())
{
try
{
context.Database.EnsureCreated();//确保创建数据库
}
catch (Microsoft.Data.Sqlite.SqliteException ex)
{
Console.WriteLine(ex.ToString() + "\r\n");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString() + "\r\n");
}
context.SaveChanges();
}
using (DemoContext context = new DemoContext())
{
for (int i = 1; i < 10; i++)
{
Player mplayer = new Player { DateOfBrith = DateTime.Now, Id = i, Name = "xiaoming" };
context.Add(mplayer);//插入player数据
}
context.SaveChanges();
}
using (DemoContext context = new DemoContext())
{
var mplayer = context.Players .ToList();//查询全部player
foreach(var m in mplayer)
Console.WriteLine(m.Id);
}
Console.ReadKey();
}
}
}
结果
另外也可以在包控制台使用命令生成数据库
Update-Database