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; } } }