You need to call SQLitePCL.raw.SetProvider()

在.NET环境中使用Entity Framework Core(EF Core)连接SQLite数据库时,报错。
使用框架 .NET8
错误信息:
Exception: You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().

这个错误主要原因就是没有安装nuget包: SQLitePCLRaw.bundle_e_sqlite3

需要安装包:
SQLitePCLRaw.bundle_e_sqlite3,版本 2.1.10
Microsoft.EntityFrameworkCore.Sqlite.Core,版本 9.0.0

ef core上下文参考代码:

using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using System.Reflection.Metadata;
using WpfRepairProject.Model;


namespace WpfRepairProject.IData_impl
{
    public class EFContextSQLite : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder options)
        {
            try
            { 
               string  filePath = "G:\\DataBase\\ljRepaireProject.sqlite"; 
                options.UseSqlite($"Data Source={filePath}");             

                //设置不跟踪所有查询  
                options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);


#if DEBUG
                //启用敏感数据日志记录
                options.EnableSensitiveDataLogging();

                //记录日志          
                options.LogTo(msg =>
                {
                    //调试-窗口消息
                    System.Diagnostics.Debug.WriteLine(msg);

                    //输出-窗口消息
                    Console.WriteLine(msg);
 
                }, Microsoft.Extensions.Logging.LogLevel.Information);
#endif
            }
            catch (Exception ex)
            {
                ex = ex.InnerException ?? ex;
                //LogHelpter.AddLog("数据库连接异常," + ex.Message, "error_DbContext");
            }
        }

        public DbSet<K_department> K_department { get; set; }


    }
}

### 关于鸿蒙开发中 `HRiver.setProvider` 的用法 在鸿蒙应用开发中,`HRiver.setProvider` 并未直接提及于所提供的引用材料中。然而,在其他框架或技术栈中类似的模式可能提供了一些线索。例如,在引用[2]中提到的 `Ext.state.Manager.setProvider` 和引用[3]中的 `SQLitePCL.raw.SetProvider()` 方法都涉及某种形式的数据存储或状态管理机制[^2][^3]。 #### 推测 `HRiver.setProvider` 的作用 假设 `HRiver.setProvider` 是一种用于配置数据源或者服务提供商的方法,则其核心功能可能是为了定义如何处理特定资源(如数据库、缓存或其他外部依赖)。以下是对其潜在用途的一些推测: 1. **设置全局的服务提供者** 类似于 `Ext.state.Manager.setProvider` 中的功能,该方法可能会被用来指定一个能够持久化或临时存储数据的对象实例。这使得开发者可以在整个应用程序生命周期内共享某些状态信息或业务逻辑接口[^2]。 2. **集成第三方库或模块** 参考引用[3]中描述的方式,如果存在类似于 Entity Framework Core 上下文中调用 `options.UseSqlite(...)` 这样的场景,那么 `setProvider` 很有可能是用来绑定具体的实现细节给抽象层使用的工具之一。 #### 示例代码片段 虽然目前无法找到确切针对鸿蒙系统的官方文档来展示实际写法,但可以根据已有经验构建如下伪代码作为参考: ```csharp // 假设这是某个初始化阶段的操作 public void InitializeHRiver() { // 创建自定义 Provider 实现类对象 var customDataProvider = new CustomDataProvider(); // 调用 setProvider 配置当前环境下的默认 provider HRiver.setProvider(customDataProvider); } ``` 在此基础上还需要注意的是,具体参数类型以及返回值等都需要依据官方 API 定义为准;以上仅为理论上的模拟演示而已。 ### 注意事项 由于缺乏明确的相关资料支持上述结论,请务必查阅最新版本的 HarmonyOS 开发手册或者其他权威渠道获取最精准的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王焜棟琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值