使用System.Data.SQLite及其EF模块操作SQLite数据库(文件)
- SQLite for .NET (System.Data.SQLite)
- introduction
- An ADO.NET provider for SQLite including EF and Linq functions.
- http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
- Developed by SQLite Development Team
- License: Public Domain, Open-Source, not Open-Contribution
- how to use
- Add references (Nuget to find “System.Data.SQLite”)
- EntityFramework (can be upgraded to 6.2.0, already include EF and Linq)
- System.Data.SQLite
- System.Data.SQLite.Core
- System.Data.SQLite.EF6 (can be removed)
- System.Data.SQLite.Linq (can be removed)
- Setup configuration file (in App.config)
- connection string
- db provider
- Create custom context class
- Add references (Nuget to find “System.Data.SQLite”)
在App.Config或Web.config文件中配置数据库的连接字符串及使用到的Provider:
<?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> <connectionStrings> <add name="PresetDataConnectionString" connectionString="data source=PresetData.db" providerName="System.Data.SQLite"/> </connectionStrings> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v13.0"/> </parameters> </defaultConnectionFactory> <providers> <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"/> <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> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/> </startup> </configuration>
自定义Context类,用于操作数据库:
/// <summary> /// Code First mode to use EF, on behalf of one DB /// </summary> public class UserDataContext : DbContext { public DbSet<FavoriteData> FavoriteDatas { get; set; } public UserDataContext(string connectionString) : base(new SQLiteConnection() { ConnectionString = connectionString }, true) { } /// <summary> /// avoid "no such table error" of __MigrationHistory and EdmMetadata in EF Code-First Mode /// </summary> static UserDataContext() { Database.SetInitializer<PresetDataContext>(null); } /// <summary> /// dummy code so that the compiler would detect that the reference is being used. /// make sure projects like VisualXml and VisualXml.Test have related dlls in output bin folder /// </summary> private static void FixProvidersNotAutoLoadProblem() { var _ = typeof(System.Data.SQLite.EF6.SQLiteProviderFactory); var __ = typeof(System.Data.SQLite.SQLiteFactory); //var ___ = typeof(System.Data.Entity.SqlServer.SqlProviderServices); } /// <summary> /// remove restriction of DbSet field names based on table names /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //modelBuilder.Configurations.AddFromAssembly(typeof(DefaultContext).Assembly); //modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly()); } }
也可以动态设置数据库连接字符串(动态往自定义的Context类的构造函数中传入拼接的连接字符串,userDataDBFilePath为db文件物理路径):
SQLiteConnectionStringBuilder builder = SQLiteFactory.Instance.CreateConnectionStringBuilder() as SQLiteConnectionStringBuilder; // set up connection string for user data db in code builder.DataSource = userDataDBFilePath; builder.Password = GenerateEncryptedDBPwd(); UserDataContext userDataDB = new UserDataContext(builder.ToString());
也可以直接使用ADO.NET操作数据库:
SQLiteConnectionStringBuilder builder = SQLiteFactory.Instance.CreateConnectionStringBuilder() as SQLiteConnectionStringBuilder; builder.DataSource = "PresetData.db"; using (SQLiteConnection conn = new SQLiteConnection(builder.ToString())) { conn.Open(); string currentLanguageViewName = "vw_nc_variable_entire_info_" + Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant().Replace('-', '_'); string sql = "select count(*) from sqlite_master where type = 'table' and name = '{" + currentLanguageViewName + "}'"; SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand(); cmd.CommandText = sql; cmd.Connection = conn; int tableInfoCount = Convert.ToInt32(cmd.ExecuteScalar()); ) { modelBuilder.Entity<EntireInfo>().ToTable("vw_nc_variable_entire_info_" + Thread.CurrentThread.CurrentUICulture.Name.ToLowerInvariant().Replace('-', '_')); } else { modelBuilder.Entity<EntireInfo>().ToTable("vw_nc_variable_entire_info_en_us"); } conn.Close(); }
使用System.Data.SQLite及其EF模块操作SQLite数据库(文件)的更多相关文章
- Python使用cx_Oracle模块操作Oracle数据库--通过sql语句和存储操作
https://www.jb51.net/article/125160.htm?utm_medium=referral Python使用cx_Oracle调用Oracle存储过程的方法示例 http ...
- 【UWP】利用EF Core操作SQLite
在以往开发中,一定要在vs中安装SQLite for Universal App Platform以及一款wrapper,如SQLitePCL.现在有了EntitfyFramewrok Core,我们 ...
- python用sqlite3模块操作sqlite数据库-乾颐堂
SQLite是一个包含在C库中的轻量级数据库.它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库. 一些应用可是使用SQLite保存 ...
- ASP.NET Core使用EF Core操作MySql数据库
ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上 使用微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql ...
- 【SQLite】 C#中操作SQlite
简介 SQLite是轻量级数据库,具体的介绍请参考官网(SQLite官网).在WinForm的项目中需要采用独立的数据库访问,可在断网单机上使用,所以选择了SQLite! 使用 主要针对C#项目(Wi ...
- 以EF形式操作mysql数据库
1.引入Nuget包: 2.书写EF操作上下文 public class MySqlContext:DbContext { protected override void OnConfiguring( ...
- nodeJS中使用mongoose模块操作mongodb数据库
在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...
- .Net版SQLite无法访问网络位置的数据库文件-winOpen,os_win.c 36702异常
最近一个C#小程序,希望将SQLite数据库放在网络共享的位置,让多个客户端同时访问.却发现SQLite连接不上该网络位置的数据库,而如果数据库在本地则一切正常. 例如将SQLite数据库 test. ...
- .net core使用ef core操作mysql数据库
新建.net core webapi项目 在NuGet包管理器中搜索 MySql.Data.EntityFrameworkCore并安装,安装的8.0.14版本,只安装这一个就够了 安装后创建Data ...
随机推荐
- [转载]用 FFMPEG 合并 MP4 视频
因为 ffmpeg 是支持切分 mp4 视频的,所以我就理所当然的以为 ffmpeg 是支持视频合并.直到今天同事找我问方法,才发现一直以为的方法是错误的, mp4 不支持直接 concate(丢人了 ...
- 调试正常,签名打包提示 "x应用未安装。"
今天在工作的时候遇到一个奇葩的问题,开发一个新项目,然后在AS中调试运行都是一切正常.打包签名后,缺无法安装,提示"x应用未安装."如图所示. 网上找了好多方法,比如,签名的时候要 ...
- vertex shader(1)
Vertex shader Architecture: 所有在vertex shader中的数据都用128-bit的quad-floats表示(4x32-bit). vertex shader线性地执 ...
- [iOS]UIScrollView嵌套UITableView,超出屏幕的cell点击不了问题
最初我是用UIScrollView嵌套了一个UIView,然后UIView里面嵌套UITableView,这样cell 就会超出屏幕那一部分点击不了. 解决方法如下,UITableView拖出来,作为 ...
- cdn path b 问题
主节点内存和磁盘最好大点,许多默认东西都放主节点了 mysql 配置文件修改后server-id = 1 1.hive 启动不起来 去配置里关掉 严格的 Hive Metastore 架构验证 hiv ...
- k8s v1.5.8 单节点搭建
setsid etcd -name etcd -data-dir /var/lib/etcd -listen-client-urls http://0.0.0.0:2379,http://0.0.0. ...
- Docker学习记录常用命令
1. docker ps -a 查看运行中的容器 2. docker images 查看docker镜像 3. docker rm id(容器id) 删除容器(容器id可以通过docker ps查 ...
- LinuxSystemProgramming-vi
Basic VI
- 创建一个实例&创建一个线程。。
using System; using System.Threading; namespace WorkerThread02 { class ThreadTest { bool done; stati ...
- linux下安装或升级GCC4.8.2,以支持C++11标准[转]
在编译kenlm的时候需要安装gcc, 然后还需要安装g++. g++安装命令:sudo apt-get install g++ ----------------------以下为网上转载内容,加上自 ...