• .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;
            }
        }
    }
  • 相关阅读:
    MFC函数—SetRegistryKey
    2013年日志及2014年、2012年等一些日志
    DECLARE_MESSAGE_MAP 宏
    c++ 重载、覆盖 (隐藏)(virtual)
    //{{AFX_MSG、//{{AFX_VIRTUAL、//{{AFX_MSG_MAP、//{{AFX_DATA_INIT
    #if defined 和 #if ! defined 的用法
    C++标准模板库STL
    C++标准库
    C++中的 CONST 含义(从#define 到 CONST 的转变)
    More Effective C++ 35 条款
  • 原文地址:https://www.cnblogs.com/fireicesion/p/16809550.html
Copyright © 2020-2023  润新知