Skip to main content

9.0 入门简要

9.0.1 入门准备

入门条件

EF/EFCore 有一定基础了解,还未接触的可先看 【EFCore 基础】

9.0.1.1 安装对应数据库包

tip

在本章节所在的类别中,所有数据库操作功能均需要依赖 EntityFramework Core 框架,但 Furion 框架底层并未集成 EntityFramework Core 包,而是采用动态加载程序集方式自动载入。

所以,如需使用本大类数据库功能,需安装对应的 EntityFramework Core 数据库包:

  • SqlServerMicrosoft.EntityFrameworkCore.SqlServer (支持 SqlServer 2005 +)
  • SqliteMicrosoft.EntityFrameworkCore.Sqlite
  • CosmosMicrosoft.EntityFrameworkCore.Cosmos
  • InMemoryDatabaseMicrosoft.EntityFrameworkCore.InMemory
  • MySql
    • Pomelo.EntityFrameworkCore.MySql:(支持 MySql 5.x +)
    • MySql.EntityFrameworkCore:支持 (MySql 8.x +)
  • PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL
  • OracleOracle.EntityFrameworkCore (支持 Oracle 10 +)
  • FirebirdFirebirdSql.EntityFrameworkCore.Firebird
  • DmMicrosoft.EntityFrameworkCore.Dm
小知识

这些数据库包应该安装在 Furion.EntityFramework.Core 层。特殊情况需安装在 Furion.Core 层中,如 Mysql HasCharset() 配置。

9.0.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> 基类,默认数据库的 TDbContextLocatorMasterDbContextLocator,无需显式编写。

非默认数据库则需显式继承并申明,如:AppDbContext<OtherDbContext, OtherDbContextLocator>

想了解更多可查阅 【数据库上下文定位器】 章节。

9.0.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);        }    }}

9.0.1.4 各类数据库连接字符串配置示例

  • SqliteData Source=./Furion.db
  • MySqlData Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8;
  • SqlServerServer=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;
  • OracleUser Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))
  • PostgreSQLPORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;

9.0.1.5 注册数据库上下文

Furion.EntityFramework.Core\Startup.cs
using Furion.DependencyInjection;using Microsoft.Extensions.DependencyInjection;namespace Furion.EntityFramework.Core{    [AppStartup(600)]    public sealed class FurEntityFrameworkCoreStartup : AppStartup    {        public void ConfigureServices(IServiceCollection services)        {            // 配置数据库上下文,支持N个数据库            services.AddDatabaseAccessor(options =>            {                // 配置默认数据库                options.AddDbPool<DefaultDbContext>();                // 配置多个数据库,多个数据库必须指定数据库上下文定位器               //  options.AddDbPool<SqliteDbContext, SqliteDbContextLocaotr>();            });        }    }}
了解更多数据库数据库注册方式

如需了解各种数据库及版本注册方式可查阅 【多数据库注册章节

9.0.1.6 Code First 说明

特别注意

Furion 框架默认数据迁移的程序集为:Furion.Database.Migrations,所以如果您改了程序集名称或通过 Nuget 方式安装的 Furion 包,则需要配置迁移程序集名称:

services.AddDatabaseAccessor(options =>{    options.AddDbPool<DefaultDbContext>(DbProvider.Sqlite);}, "存放迁移文件的项目名称");

另外,如果应用中配置了多个数据库上下文,那么所有的 迁移命令 都需要指定 -Context 数据库上下文名称 参数。如:

Add-Migration v1.0.0 -Context DefaultDbContext

9.0.2 反馈与建议

与我们交流

给 Furion 提 Issue

演练场