EFCore Configuration
Overview
Architecture Overview
Configuration Flow
Database Selection → Tenant Model Selection → Connection Provider Setup → DbContext Configuration → Repository RegistrationProject Structure
Database Infrastructure Projects
EBusiness.Application/Infrastructure/Db/
├── EBusiness.BaseEF/ # Core EF configuration
│ ├── ApplicationEFDbContext.cs # Single-tenant DbContext
│ ├── ApplicationTenantEFDbContext.cs # Multi-tenant DbContext
│ ├── ConnectionProviders/ # Connection provider implementations
│ │ ├── AppSettingsReadDbConnectionProvider.cs
│ │ ├── AppSettingsWriteDbConnectionProvider.cs
│ │ ├── NativeReadDbTenantConnectionProvider.cs
│ │ └── NativeWriteDbTenantConnectionProvider.cs
│ └── EBusiness.BaseEF.csproj
├── EBusiness.BaseEF.SqlServer/ # SQL Server implementation
│ ├── ApplicationEFSqlServerDbContext.cs
│ ├── FlexEFTenantMasterSqlServerContext.cs
│ ├── FlexReadDbRepositoryEFSQLServer.cs
│ ├── FlexWriteDbRepositoryEFSQLServer.cs
│ ├── FlexTenantMasterRepositoryEFSQLServer.cs
│ └── EBusiness.BaseEF.SqlServer.csproj
├── EBusiness.BaseEF.MySql/ # MySQL implementation
│ ├── ApplicationEFMySqlDbContext.cs
│ ├── FlexEFTenantMasterMySqlContext.cs
│ ├── FlexReadDbRepositoryEFMySql.cs
│ ├── FlexWriteDbRepositoryEFMySql.cs
│ ├── FlexTenantMasterRepositoryEFMySql.cs
│ └── EBusiness.BaseEF.MySql.csproj
└── EBusiness.BaseEF.PostgreSql/ # PostgreSQL implementation
├── ApplicationEFPostgreSqlDbContext.cs
├── FlexEFTenantMasterPostgreSqlContext.cs
├── FlexReadDbRepositoryEFPostgreSql.cs
├── FlexWriteDbRepositoryEFPostgreSql.cs
├── FlexTenantMasterRepositoryEFPostgreSql.cs
└── EBusiness.BaseEF.PostgreSql.csproj
└── EBusiness.BaseEF.Oracle/ # Oracle implementation (example)
├── ApplicationEFOracleDbContext.cs
├── FlexEFTenantMasterOracleContext.cs
├── FlexReadDbRepositoryEFOracle.cs
├── FlexWriteDbRepositoryEFOracle.cs
├── FlexTenantMasterRepositoryEFOracle.cs
└── EBusiness.BaseEF.Oracle.csprojDependencies
Configuration Selection Logic
DbEndPointConfig.cs - Database and Tenant Configuration
Single Tenant vs Multi-Tenant Architecture
Single Tenant Architecture
Characteristics:
Configuration:
Connection Providers:
Use Cases:
Multi-Tenant Architecture
Characteristics:
Configuration:
Connection Providers:
FlexBase Multi-Tenant Advantages:
Use Cases:
Database Provider Configurations
1. SQL Server Configuration
DbContext Implementation:
Tenant Master Context:
Characteristics:
Configuration Requirements:
2. MySQL Configuration
Characteristics:
Configuration Requirements:
3. PostgreSQL Configuration
Characteristics:
Configuration Requirements:
4. Oracle Configuration
DbContext Implementation:
Tenant Master Context:
Characteristics:
Configuration Requirements:
Oracle-Specific Features:
Core EF Configuration
ApplicationEFDbContext.cs - Single Tenant Context
ApplicationTenantEFDbContext.cs - Multi-Tenant Context
Connection Providers
Single Tenant Connection Providers
AppSettingsWriteDbConnectionProvider.cs
AppSettingsReadDbConnectionProvider.cs
Multi-Tenant Connection Providers
NativeWriteDbTenantConnectionProvider.cs
NativeReadDbTenantConnectionProvider.cs
Repository Implementations
SQL Server Repositories
FlexWriteDbRepositoryEFSQLServer.cs
FlexReadDbRepositoryEFSQLServer.cs
FlexTenantMasterRepositoryEFSQLServer.cs
MySQL Repositories
FlexWriteDbRepositoryEFMySql.cs
FlexReadDbRepositoryEFMySql.cs
PostgreSQL Repositories
FlexWriteDbRepositoryEFPostgreSql.cs
FlexReadDbRepositoryEFPostgreSql.cs
Oracle Repositories
FlexWriteDbRepositoryEFOracle.cs
FlexReadDbRepositoryEFOracle.cs
FlexTenantMasterRepositoryEFOracle.cs
Configuration Best Practices
1. Environment-Specific Configuration
2. Connection String Management
3. Database Selection Guidelines
Scenario
Recommended Database
Reason
4. Tenant Model Selection
Scenario
Recommended Model
Reason
Performance Considerations
1. Connection Pooling
2. Query Optimization
3. Read/Write Separation
Troubleshooting
Common Issues
Debugging Tips
Key Benefits
Last updated