• .NET Core 2.1 EF(Entity Framework) Core Sqlite配置和使用分享


    本文主要介绍.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"。

    Nuget使用教程

    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;
            }
        }
    }
  • 相关阅读:
    【美团技术团队文章--学习笔记】之 Java动态追踪技术探究
    mq
    为啥要读写分离
    算法 数据结构
    对扩展开放,对修改关闭
    redis 事务
    准实时数仓设计方案
    Scala Puzzlers 系列(一):占位符的使用
    【面试题】大数据开发岗位
    Hive 分区和分桶
  • 原文地址:https://www.cnblogs.com/fireicesion/p/16809550.html
Copyright © 2020-2023  润新知