本文主要介绍.NET Core2.1,在EF(Entity Framework) Core中配置使用Sqlite数据库,自动创建Sqlite数据库,自动创建表。
1、安装用到的Nuget包
项目上右键 -》选择"管理Nuget程序包" -》搜索"Microsoft.EntityFrameworkCore.Sqlite
" -》点击"Microsoft.EntityFrameworkCore.Sqlite
"安装,还要安装"Microsoft.EntityFrameworkCore.Sqlite.Core
"和"Microsoft.EntityFrameworkCore.Tools
"。
2、连接字符串和数据库中字段验证
using Microsoft.EntityFrameworkCore;
using SpiderContent.Data.Models;
using System;
using System.Collections.Generic;
using System.Text;
namespace SpiderContent.Data
{
public class SpiderContext : DbContext
{
public DbSet<PageInfo> PageInfos { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Filename=./spider.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PageInfo>(entity =>
{
entity.HasKey(e => e.Id);
entity.Property(e => e.Title).IsRequired();
});
}
}
}
3、数据库初始化和工具方法代码
using Microsoft.Extensions.Configuration;
using SpiderContent.Data.Models;
using System;
using System.Linq;
using System.Reflection;
namespace SpiderContent.Data
{
public class Utils
{
/// <summary>
/// 用来初始化数据库,没有则新建数据库
/// </summary>
static Utils()
{
using (var context = new SpiderContext())
{
context.Database.EnsureCreated();
}
}
/// <summary>
/// 获取配置信息
/// </summary>
private static IConfigurationRoot configuration;
public static IConfigurationRoot Configuration
{
get
{
if (configuration == null)
{
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
configuration = builder.Build();
}
return configuration;
}
}
public static void SaveData(PageInfo pageInfo)
{
using (var context = new SpiderContext())
{
context.PageInfos.Add(pageInfo);
context.SaveChanges();
}
}
public static void SaveOrUpdate(PageInfo pageInfo)
{
using (var context = new SpiderContext())
{
PageInfo p = context.PageInfos.Where(w => w.Url.Trim() == pageInfo.Url.Trim()).FirstOrDefault();
if (p != null)
{
p.Page = pageInfo.Page;
p.PlainText = pageInfo.PlainText;
p.Title = pageInfo.Title;
p.Url = pageInfo.Url;
p.views = pageInfo.views;
p.votes = pageInfo.votes;
p.answers = pageInfo.answers;
p.askedTime = pageInfo.askedTime;
p.askedTimeBounty = pageInfo.askedTimeBounty;
p.description = pageInfo.description;
context.Update(p);
}
else
{
context.Add(pageInfo);
}
context.SaveChanges();
}
}
public static PageInfo ToPageInfo(object model)
{
PageInfo pageInfo = new PageInfo();
PropertyInfo property = null;
foreach (var item in typeof(PageInfo).GetProperties())
{
property = model.GetType().GetProperty(item.Name);
if (property != null)
{
item.SetValue(pageInfo, property.GetValue(model));
}
}
return pageInfo;
}
}
}