关于C# 使用 sqlite 映射实体类笔记

1、安装SQLite

csharp 复制代码
在 nuget 搜索 System.Data.SQLite 安装

2、在 app.conifg 文件中添加如下信息

csharp 复制代码
 <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />

解决问题:

No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SQLite'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information."

完整的 app.config 文件

csharp 复制代码
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
      <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>
</configuration>

3、创建 SQLiteContext.cs 文件

csharp 复制代码
using System.Data.Entity;
using System.Data.SQLite;

namespace dbz_desktop_ser.db
{
    public class SQLiteContext : DbContext
    {
        public SQLiteConnection DbConnection { get; set; }

        public DbSet<NetbarInfo> NetbarInfo { get; set; }

        public SQLiteContext(string connectionString) : base(new SQLiteConnection() { ConnectionString = $@"URI=file:{connectionString}" }, true)
        {
            DbConnection = (SQLiteConnection)base.Database.Connection;
        }
    }
}

4、创建 NetbarInfo.CS 文件 (数据模型)

csharp 复制代码
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace dbz_desktop_ser.dbModel
{
    [Table("NetbarInfo")]
    public class NetbarInfo
    {
        [Key]
        public int id { get; set; }

        [Column("name")]
        public string Name { get; set; }

    }
}

5、创建 NetbarInfoHelper.cs 文件 (增删改查)

csharp 复制代码
using dbz_desktop_ser.dbModel;
using System.Linq;

namespace dbz_desktop_ser.db
{
    public class NetbarInfoHelper
    {
        private readonly SQLiteContext _context;

        public NetbarInfoHelper(string connectionString)
        {
            _context = new SQLiteContext(connectionString);
        }

        // 查询门店信息  
        public IQueryable<NetbarInfo> GetNetbarInfo()
        {
            return _context.NetbarInfo;
        }

    }
}

6、调用

csharp 复制代码
using dbz_desktop_ser.db;
using System;
using System.Windows.Forms;

namespace dbz_desktop_ser.WinForm
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {

            var db = new NetbarInfoHelper("myConfig.db");
            var info = db.GetNetbarInfo();

            foreach (var item in info)
            {
                Console.WriteLine($"id:{item.id} 名称:{item.Name}");
            }

        }
    }
}
相关推荐
开开心心就好5 小时前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
估值探索者5 小时前
【Python量化系统工程实战 #01】数据存储选型 CSVSQLiteMySQL 对比与 SQLite 实战建库
开发语言·jvm·python·sqlite·api接口·数据api接口·股票数据api接口
QQ_21696290965 小时前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
Studying 开龙wu5 小时前
CVAT 导出崩溃排查实录:一个空壳轨迹引发的连锁反应
数据库·sqlite
未来之窗软件服务14 小时前
C# 截图源码支持自动保存-东方仙盟
c#·仙盟创梦ide·东方仙盟·电脑工具
UIU1141 天前
-7 / 2 在 C 里是 -3,在 Python 里是 -4,谁算错了?
c++·学习·c#
wflynn1 天前
GitHub 今日推荐|REDox:64 位 token 表示结构化数据,内存占用降 70% 支持多格式互转
开源·c#·github
DingYuan1011 天前
Django模板继承
数据库·sqlite
驰骋工作流1 天前
C#/.NET 开源BPM工作流引擎6大常用对比选型分析驰骋BPM驰骋低代码低代码工作流引擎
开源·c#·.net
en.en..1 天前
C语言 fp与fd 区别详解
c#