
先养养眼
一,前置说明:System.Data.SQLite 1.0.112.0之后开始,SQLite数据库的免费版本不再支持设置登录密码,所以这里使用最后一版支持密码的版本System.Data.SQLite 1.0.112.1
下载地址已经有大佬准备好了
https://gitee.com/BuLuoPiaoYu/sqlite-helper二,把下载下来的dll放到项目Libs目录下

三,配置项目生成事件,让程序自动复制x86和x64运行时自动复制到生成目录下,嫌麻烦可以自己手动复制
xcopy $(ProjectDir)Libs\x86\* $(TargetDir)x86\* /e /i /y
xcopy $(ProjectDir)Libs\x64\* $(TargetDir)x64\* /e /y


四,在nuget上引入EF6和SQLite.CodeFirst类库和引用Libs下的三个类库文件
4.1.手动引用libs下的类库


4.2.通过nuget安装前面的两个类库,其实仅需安装SQLite.CodeFirst类库即可,因为他自引用依赖了EntityFramework这个类库,无需多此一举再去引用EntityFramework

五,开始码代码
5.1.创建免配置的文件的配置类SQLiteConfiguration.vb
Imports System.Data.Entity
Imports System.Data.Entity.Core.Common
Imports System.Data.SQLite
Imports System.Data.SQLite.EF6
''' <summary>
''' 配置类
''' </summary>
Public Class SQLiteConfiguration
Inherits DbConfiguration
''' <summary>
''' 构造函数
''' </summary>
Public Sub New()
SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance)
SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance)
SetProviderServices("System.Data.SQLite", CType(SQLiteProviderFactory.Instance.GetService(GetType(DbProviderServices)), DbProviderServices))
SetProviderServices("System.Data.SQLite.EF6", CType(SQLiteProviderFactory.Instance.GetService(GetType(DbProviderServices)), DbProviderServices))
End Sub
End Class
5.2.配置数据库上下文AppDbContext.vb
Imports System.Data.Common
Imports System.Data.Entity
Imports System.Data.Entity.ModelConfiguration.Conventions
Imports System.Data.SQLite
Imports System.IO
Imports SQLite.CodeFirst
''' <summary>
''' 数据库上下文
''' </summary>
<DbConfigurationType(GetType(SQLiteConfiguration))> '' 引入配置类
Public Class AppDbContext
Inherits DbContext
''' <summary>
''' 构造函数
''' </summary>
''' <param name="connectionString"></param>
Public Sub New(Optional connectionString As String = Nothing)
MyBase.New(CreateConnection(connectionString), True)
'------------
Configuration.ValidateOnSaveEnabled = False
Configuration.LazyLoadingEnabled = False
'------------ 输出SQL日志
Database.Log = New Action(Of String)(Sub(sql)
Trace.WriteLine(sql)
End Sub)
End Sub
''' <summary>
''' 创建链接对象
''' </summary>
''' <returns></returns>
Private Shared Function CreateConnection(connectionString As String) As DbConnection
If connectionString = Nothing Then
Dim dbPath As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DataBase.db3") '' 配置数据库地址
Dim password As String = "bgmh123456" '' 配置数据库密码
connectionString = String.Format("Data Source={0};password={1};Version=3;", dbPath, password)
End If
Return New SQLiteConnection(connectionString)
End Function
''' <summary>
''' 在模型创建时进行模型配置
''' </summary>
''' <param name="modelBuilder"></param>
Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
' CodeFirst创建数据库和数据表
' 当模型发生变化时,适合开发环境
Dim sqliteConnectionInitializer = New SqliteDropCreateDatabaseWhenModelChanges(Of AppDbContext)(modelBuilder)
' 当数据库不存在时,适合正式环境
' Dim sqliteConnectionInitializer = New SqliteCreateDatabaseIfNotExists(Of AppDbContext)(modelBuilder)
Database.SetInitializer(sqliteConnectionInitializer)
' 移除复数表名约定
modelBuilder.Conventions.Remove(Of PluralizingTableNameConvention)()
' 对模型进行配置
ModelSQLiteConfiguration(modelBuilder)
End Sub
''' <summary>
''' 模型配置
''' </summary>
''' <param name="modelBuilder"></param>
Private Sub ModelSQLiteConfiguration(modelBuilder As DbModelBuilder)
' 配置User表的CreateTime默认值
' modelBuilder.Entity(Of TestTable)() _
' .Property(Function(u) u.DateString) _
' .HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)
End Sub
End Class

5.3.创建一个测试数据表模型名为 TestUser
Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel.DataAnnotations.Schema
Imports SQLite.CodeFirst
''' <summary>
''' 用户数据表
''' </summary>
Public Class TestUser
''' <summary>
''' 主键ID自增
''' </summary>
''' <returns></returns>
<Key> ''主键
<DatabaseGenerated(DatabaseGeneratedOption.Identity)> '' 自增ID
Public Property Id As Integer
''' <summary>
''' 用户名
''' </summary>
''' <returns></returns>
<Unique> ''唯一值
Public Property Name As String
''' <summary>
''' 用户密码
''' </summary>
''' <returns></returns>
Public Property Password As String
End Class
5.4.然后在数据库上下文中,定义表数据集
''' <summary>
''' 用户表数据集
''' </summary>
Public Property TestUsers As DbSet(Of TestUser)
六,主要代码码完,下面我们测试一下
6.1.添加数据,运行看看
首次添加



再次添加,报错,为什么?因为我们之前设置Name字段为唯一值,所以报错正常

6.2.查询数据,运行看看效果,嗯,很nice







七,用其他数据库管理工具打开数据库,看看是否已经加密


可以看到报错,说明加密成功,下面我们数据密码看看!



好了,今天的内容到这里了!!!