C# 具有实体框架核心的密码保护SQLite
我试图创建一个受密码保护的SQLite数据库,以便在使用EntityFramework核心的WPF应用程序中使用它 我了解了如何从现有的SQLite DB(数据库优先方法)生成我的DbContext和实体,但我无法让它使用受密码保护的DB 实际上,我甚至不知道如何创建一个受密码保护的SQLite DB。加密数据库和受密码保护的数据库有什么区别?根据这一点和这一点,没有办法(目前?)使用Microsoft.Data.Sqlite程序集(由EF Core使用)加密数据库 基于此,以下是我为使其与EF Core一起工作所做的工作:C# 具有实体框架核心的密码保护SQLite,c#,sqlite,entity-framework-core,C#,Sqlite,Entity Framework Core,我试图创建一个受密码保护的SQLite数据库,以便在使用EntityFramework核心的WPF应用程序中使用它 我了解了如何从现有的SQLite DB(数据库优先方法)生成我的DbContext和实体,但我无法让它使用受密码保护的DB 实际上,我甚至不知道如何创建一个受密码保护的SQLite DB。加密数据库和受密码保护的数据库有什么区别?根据这一点和这一点,没有办法(目前?)使用Microsoft.Data.Sqlite程序集(由EF Core使用)加密数据库 基于此,以下是我为使其与EF
- 将包添加到项目中
- 在配置数据库上下文时,为
选项生成器提供您自己的
:DbConnection
var conn = new SQLiteConnection(@"Data Source=yourSQLite.db;"); conn.Open(); var command = conn.CreateCommand(); command.CommandText = "PRAGMA key = password;"; command.ExecuteNonQuery(); optionsBuilder.UseSqlite(conn);
System.Data.SQLite.Core
程序集中的SQLiteConnection
(可管理加密数据库)而不是Microsoft.Data.SQLite
中的SQLiteConnection
非常重要
根据这篇文章,您可能可以使用内置的
SqliteConnection
,将Microsoft.Data.Sqlite
程序集中附带的sqlite3.dll
替换为另一个处理加密数据库的程序集(您可以在此找到免费的)。但我没有测试它
是怎么做到的 您可以通过
dbCon.SetPassword(myLitePW)
对数据库进行加密,然后在连接字符串中使用密码:Data Source=c:\mydb.DB;版本=3;密码=myLitePW代码>除非我弄错了,否则这适用于EF6(在System.Data.SQLite包中)。但是使用EF Core(在Microsoft.Data.SQLite包中),我找不到这样做的方法。。。(来自Microsoft.Data.SQLite的SQLite连接中没有SetPassword方法)当我使用此方法时,我得到了System.ObjectDisposedException:“无法访问已处置的对象”。嗯,代码中的某些内容必须对其中一个对象调用Dispose()
。您是否在任何地方使用using
子句?离开using子句时,用它定义的对象将自动释放。感谢您的回复,我知道using子句是如何工作的,问题是我在错误的位置使用了您的代码,并且您的答案在xamarin表单中完全正确,我无法使用System.Data.SQLite.Core。还有其他解决方案吗?谢谢回复@法罗