• SQLite for .NET (System.Data.SQLite)

    • introduction
    • 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

在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数据库(文件)的更多相关文章

  1. Python使用cx_Oracle模块操作Oracle数据库--通过sql语句和存储操作

    https://www.jb51.net/article/125160.htm?utm_medium=referral  Python使用cx_Oracle调用Oracle存储过程的方法示例 http ...

  2. 【UWP】利用EF Core操作SQLite

    在以往开发中,一定要在vs中安装SQLite for Universal App Platform以及一款wrapper,如SQLitePCL.现在有了EntitfyFramewrok Core,我们 ...

  3. python用sqlite3模块操作sqlite数据库-乾颐堂

    SQLite是一个包含在C库中的轻量级数据库.它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库. 一些应用可是使用SQLite保存 ...

  4. ASP.NET Core使用EF Core操作MySql数据库

    ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上 使用微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql ...

  5. 【SQLite】 C#中操作SQlite

    简介 SQLite是轻量级数据库,具体的介绍请参考官网(SQLite官网).在WinForm的项目中需要采用独立的数据库访问,可在断网单机上使用,所以选择了SQLite! 使用 主要针对C#项目(Wi ...

  6. 以EF形式操作mysql数据库

    1.引入Nuget包: 2.书写EF操作上下文 public class MySqlContext:DbContext { protected override void OnConfiguring( ...

  7. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  8. .Net版SQLite无法访问网络位置的数据库文件-winOpen,os_win.c 36702异常

    最近一个C#小程序,希望将SQLite数据库放在网络共享的位置,让多个客户端同时访问.却发现SQLite连接不上该网络位置的数据库,而如果数据库在本地则一切正常. 例如将SQLite数据库 test. ...

  9. .net core使用ef core操作mysql数据库

    新建.net core webapi项目 在NuGet包管理器中搜索 MySql.Data.EntityFrameworkCore并安装,安装的8.0.14版本,只安装这一个就够了 安装后创建Data ...

随机推荐

  1. 使用EXCEL绘制三维地图(超简单的五分钟绘制地图方法,妈妈再也不用担心我不会画地图啦~)

    博主为从区域规划转行地图学的小学渣一枚,最近处理数据希望对结果进行三维可视化,意外发现从小用到大的EXCEL可以绘制地图且功能非常强大,在这里做一下简单介绍,希望可以给看官提供些许帮助.那下面就开始吧 ...

  2. 跟我学算法-tensorflow 实现神经网络

    神经网络主要是存在一个前向传播的过程,我们的目的也是使得代价函数值最小化 采用的数据是minist数据,训练集为50000*28*28 测试集为10000*28*28 lable 为50000*10, ...

  3. 转 Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值

    jquery取radio单选按钮的值   $("input[name='items']:checked").val();  另:判断radio是否选中并取得选中的值  如下所示: ...

  4. MyBatis 学习记录5 MyBatis的二级缓存

    主题 之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类. 现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情 首先二级缓存默认是不开启的,需要自 ...

  5. Tomcat集群---Cluster节点配置

    <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...

  6. fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory

    其实 <iostream.h>是c风格的,你可用,但注意格式:  要么是:  #include <iostream>  using namespace std; 在标准C++里 ...

  7. Elasticsearch-PHP 命名空间

    命名空间 客户端有很多命名空间,通常能够暴漏出他管理的功能.命名空间对应Elasticsearch各种管理的端点.如下是完成的命名空间的列表: 命名空间 功能 indices() 以指数为中心的统计数 ...

  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第九周

    第七章:<异常,断言和日志>知识点小结       本周,进行了对Java中的异常处理的了解学习,以下是部分所得. 一.未检查异常与已检查异常的区别: 未检查异常处理方法:1.捕获2.继续 ...

  9. NormalMap & CubeMap

    [NormalMap & CubeMap] 有时候我们需要CubeMap的环境反射也需要有凹凸信息,此时需要装将NormalMap与CubeMap结合. 因为要使用NormalMap,使用Pr ...

  10. 30-Transformation(HDU4578)-区间线段树(复杂)

    http://acm.hdu.edu.cn/showproblem.php?pid=4578 Transformation Time Limit: 15000/8000 MS (Java/Others ...