9.19 多种数据库操作
连接字符串配置注意事项
如果连接字符串是配置在自定义的 .json 文件中,那么必须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为 内容。
否则就会提示找不到配置或连接字符串的错误。
9.19.1 Furion 支持数据库提供器
| SqlServer | Sqlite | Cosmos | InMemoryDatabase | MySql | PostgreSQL | Oracle | Firebird | Dm |
|---|---|---|---|---|---|---|---|---|
| ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
9.19.1.1 数据库提供器对应包
SqlServer:Microsoft.EntityFrameworkCore.SqlServer(支持 SqlServer 2005 +)Sqlite:Microsoft.EntityFrameworkCore.SqliteCosmos:Microsoft.EntityFrameworkCore.CosmosInMemoryDatabase:Microsoft.EntityFrameworkCore.InMemoryMySqlPomelo.EntityFrameworkCore.MySql:(支持 MySql 5.x +)MySql.EntityFrameworkCore:支持 (MySql 8.x +)
PostgreSQL:Npgsql.EntityFrameworkCore.PostgreSQLOracle:Oracle.EntityFrameworkCore(支持 Oracle 10 +)Firebird:FirebirdSql.EntityFrameworkCore.FirebirdDm:Microsoft.EntityFrameworkCore.Dm
小知识
这些数据库包应该安装在 Furion.EntityFramework.Core 层。特殊情况需安装在 Furion.Core 层中,如 Mysql HasCharset() 配置。
9.19.2 多数据库服务注册
// 注册 SqlServer
options.AddDbPool<FurionDbContext>(DbProvider.SqlServer);
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2005"); // 支持 2005 数据库
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2008"); // 支持 2008 数据库
// 注册 Sqlite
options.AddDbPool<FurionDbContext>(DbProvider.Sqlite);
// 注册 Cosmos
options.AddDbPool<FurionDbContext>(DbProvider.Cosmos);
// 注册 InMemoryDatabase
options.AddDbPool<FurionDbContext>(DbProvider.InMemoryDatabase);
// 注册 MySql
options.AddDbPool<FurionDbContext>(DbProvider.MySql);
options.AddDbPool<FurionDbContext>($"{DbProvider.MySql}@8.0.22"); // 可以指定版本号
options.AddDbPool<FurionDbContext>(DbProvider.MySqlOfficial); // 使用 MySql 官方包(MySql.EntityFrameworkCore)
// 注册 PostgreSQL
options.AddDbPool<FurionDbContext>(DbProvider.Npgsql);
// 注册 Oracle
options.AddDbPool<FurionDbContext>(DbProvider.Oracle);
options.AddDbPool<FurionDbContext>($"{DbProvider.Oracle}@11"); // 支持 Oracle 11 版本
// 注册 Firebird
options.AddDbPool<FurionDbContext>(DbProvider.Firebird);
// 注册 Dm
options.AddDbPool<FurionDbContext>(DbProvider.Dm);
新版 SqlServer/MySQL/Oracle 注意
SqlServer 兼容 2005-2008 写法:
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2005"); // 支持 2005 数据库
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2008"); // 支持 2008 数据库
});
MySQL 兼容旧版本(带版本号)写法:
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>($"{DbProvider.MySql}@8.0.22");
});
如果使用了 MySql.EntityFrameworkCore 包,则需改为以下注册:
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>(DbProvider.MySqlOfficial);
});
Oracle 兼容 11 版本
services.AddDatabaseAccessor(options =>
{
// 正常这样配置即可
options.AddDbPool<FurionDbContext>($"{DbProvider.Oracle}@11");
// 如果依然出现 ORA-00933: SQL 错误,可以尝试以下配置:
options.AddDbPool<FurionDbContext>($"{DbProvider.Oracle}@11", optionBuilder: (ses, opt) =>
{
opt.UseOracle(b => b.UseOracleSQLCompatibility("11"));
});
});

