使用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 ...
随机推荐
- 我的Linux之路——虚拟机linux与主机之间的文件传送
出自:https://jingyan.baidu.com/article/d169e186a00422436711d872.html FTP工具或者FTP命令(put.get) 常用的工具如:Xftp ...
- Core1.1环境下,自己实现的一个简单的CRUD框架(反射实现)
我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一 ...
- java多线程-慎重使用volatile关键字
Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而 ...
- C#自省
[C#自省] 1.根据string,获取type.Type.GetType 方法,获取具有指定名称的 Type,执行区分大小写的搜索. 2.根据obj,获取type.Object.GetType 方法 ...
- new 约束
[new 约束] new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数.如果要使用 new 约束,则该类型不能为抽象类型. 当泛型类创建类型的新实例,请将 new 约束应用于类型参数 ...
- Thinking in 查询设计
近日,互联网动物园的各位小伙伴们召开了一次会议,考虑到大火的电子商务,准备在动物园里开发一个电商系统.首先上台的是销售山鸡,清了清嗓子,说道,人类正在进行电商革命,动物园也需要上一个电商系统,必要性有 ...
- ROS tf 编程指南
ROS (Robot Operating System, 机器人操作系统)是最知名的机器人操作系统,广泛应用于无人驾驶和机器人,tf(transforms,坐标系转换)是ROS下的一个常用的工具库.r ...
- jvisualvm远程监控服务器tomcat
1.在 {服务器tomcat路径}/bin/catalina.sh 中,的[# OS specific support. $var _must_ be set to either true or f ...
- Redis中redis.conf里面配置详解
是否将redis设置为守护程序,默认为no daemonize yes 如果设置为守护程序,需要指定pid文件 pidfile /var/run/redis/redis-server.pid ...
- Lua与C交换
1.C调用Lua函数 (1) 首先要进行Lua的初始化,这个主要是lua_open和luaL_openlibs函数 (2)然后是解析并编译lua的代码,这个主要是luaL_dofile函数 (3) ...