9.1 入门简要
9.1.1 入门准备
入门条件
对 EF/EFCore 有一定基础了解,还未接触的可先看 【EFCore 基础】
9.1.1.1 安装对应数据库包
tip
在本章节所在的类别中,所有数据库操作功能均需要依赖 EntityFramework Core 框架,但 Furion 框架底层并未集成 EntityFramework Core 包,而是采用动态加载程序集方式自动载入。
所以,如需使用本大类数据库功能,需安装对应的 EntityFramework Core 数据库包:
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
小知识
这些数据库包应该安装在 YourProject.EntityFramework.Core 层。特殊情况需安装在 YourProject.Core 层中,如 Mysql HasCharset() 配置。
9.1.1.2 创建数据库上下文
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}
}
}
特别注意
每一个数据库上下文都需继承 AppDbContext<TDbContext, TDbContextLocator> 基类,默认数据库的 TDbContextLocator 为 MasterDbContextLocator,无需显式编写。
非默认数据库则需显式继承并申明,如:AppDbContext<OtherDbContext, OtherDbContextLocator>。
想了解更多可查阅 【数据库上下文定位器】 章节。
9.1.1.3 配置连接字符串
Furion 框架提供多种方式配置数据库连接字符串:
appsettings.json中配置
{
"ConnectionStrings": {
"Sqlite3ConnectionString": "Data Source=./Furion.db"
}
}
- 自定义
.json文件配置
{
"ConnectionStrings": {
"Sqlite3ConnectionString": "Data Source=./Furion.db"
}
}
该方式和在 appsettings.json 的区别是自定义的 .json 文件不会自动添加到项目中,须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为:内容。
[AppDbContext]特性配置
[AppDbContext("Data Source=./Furion.db", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
}
- 在注册上下文时配置
services.AddDatabaseAccessor(options =>
{
// options.AddDb<DefaultDbContext>(connectionMetadata: "配置Key或连接字符串");
options.AddDbPool<DefaultDbContext>(connectionMetadata: "配置Key或连接字符串");
});
- 在
DbContext中配置
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
namespace Furion.EntityFramework.Core
{
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("连接字符串");
base.OnConfiguring(optionsBuilder);
}
}
}
