Data Access Layer
Entity Framework Core implementation, repositories, and data access patterns.
DATA ACCESS FLOWRequest flow from UI through service and repository layers to MySQL.
rendering diagram…
flowchart LR
UI[Blazor Page<br/>MAUI Screen]:::app
SVC[Service Interface<br/>50 plus implementations]:::svc
REPO[Repository<br/>46 interfaces]:::svc
CTX[GmiDbContext<br/>EF Core 9]:::svc
DB[(MySQL<br/>Flexible Server)]:::data
BLOB[(Azure Blob<br/>Storage)]:::data
EXT[External APIs<br/>Stripe - FMP - SendGrid]:::ext
UI -->|calls| SVC
SVC -->|reads - writes via| REPO
REPO -->|queries via| CTX
CTX -->|SQL| DB
SVC -->|file operations| BLOB
SVC -->|integration calls| EXT
classDef app fill:#1f2630,stroke:#C0894E,color:#F3EFE8;
classDef svc fill:#241c14,stroke:#E2B583,color:#F3EFE8;
classDef data fill:#22201a,stroke:#C0894E,color:#EBD3AE;
classDef ext fill:#1b1f27,stroke:#5A616B,color:#C4C0B8;
classDef sec fill:#1d2733,stroke:#5cc8e0,color:#eafaff;Gmi.DataAccess Library
The data access layer is implemented using Entity Framework Core with the following architecture:
- DbContext:
GmiDbContext- Central database context - Entities: POCO classes representing database tables
- Configuration: Fluent API configuration for relationships and constraints
- Migrations: Database schema versioning and updates
Entity Models
All entity models are defined in the Gmi.ClassLibrary.Models namespace with full Entity Framework Core annotations and navigation properties.
Account- User accounts with profile, contact info, and validation statusAccountEmailAddress- Multiple email addresses per accountAccountEmailValidationToken- Email verification tokens with expirationAccountSmsNumber- SMS phone numbers for notificationsCreditCard- Tokenized payment methods
Job- Report generation jobs with status trackingJobStatusType- Job status definitions (NewReadyForProcessing, Processing, etc.)JobCharge- Links jobs to their associated chargesJobNotificationSetting- Notification preferences for jobsJobNotificationSettingsAccountEmailAddress- Email notification recipientsJobNotificationSettingsAccountSmsNumber- SMS notification recipients
File- Generated reports with Azure blob storage integrationFolder- Hierarchical folder structure with parent/sibling relationshipsJobFolder- Links jobs to foldersAccountFolder- Links accounts to foldersFileDownload- Download tracking and analytics
SymbolList- Named collections of stock symbolsSymbolListItem- Individual symbols within listsJobSymbolList- Links jobs to symbol listsPositionReport- Portfolio position trackingPositionReportListItem- Individual positions with share counts and pricesReportGenerationSchedule- Scheduled report generation
Charge- Service usage chargesPayment- Payment transaction recordsServicePricing- Pricing configuration per serviceCouponCode- Promotional codes with discountsCouponUsage- Tracks coupon redemptionsInvoice- Monthly billing invoicesInvoiceCharge- Links charges to invoicesBillingRun- Monthly billing process tracking
EmailToSend- Email queue with To/Cc/Bcc supportSmsToSend- SMS notification queue
AdminUser- Admin users with Azure AD integrationAdminUserRole- Enum: SuperAdmin, Admin, SupportAdminNotificationEmailAddress- Email addresses for admin event notifications
StripeWebhookEvent- Captured Stripe webhook events for idempotent processingStripeRefund- Refund records from Stripe charge.refunded eventsStripeDispute- Dispute records from Stripe dispute webhooksFailedPaymentReconciliation- Failed payment tracking for reconciliation
ClaudeAnalysisJob- Claude AI analysis job trackingClaudeAnalysisRequest- Individual file analysis requests within a jobReportComparisonJob- Period-over-period report comparison jobsReportComparisonJobSymbolList- Links comparison jobs to symbol lists
LoginHistory- User login trackingAuditLog- System audit trailActivityLogEntry- User activity tracking (page views, clicks, operations)SystemHealthCheck- Periodic system health check resultsCriticalErrorLog- Critical error tracking across all services
SymbolListTemplate- Predefined symbol list templates (system and customer)SymbolListTemplateItem- Individual symbols within templatesDownload- ZIP download queue for folder downloads
Model Features
Data Annotations
[Key]- Primary key definitions[Required]- Non-nullable fields[StringLength]- Field size constraints[Column]- Custom column mappings[ForeignKey]- Relationship definitions
Navigation Properties
- One-to-many relationships
- Many-to-many via junction tables
- Self-referencing hierarchies
- Nullable foreign keys
- Cascade delete behaviors
Repository Pattern Implementation
Service Layer (Gmi.Services) - 50+ Service Interfaces
The service layer provides abstraction over Entity Framework operations with 46 repository implementations:
Account & User Management
IAccountService- Account CRUD, search, and validationIAccountEmailService- Email address managementIAccountSmsService- SMS number managementIAccountEmailValidationService- Email verification tokensIAdminUserService- Admin user managementICreditCardService- Payment method management
Job & Report Management
IJobService- Job lifecycle and queue managementIJobNotificationService- Notification preferencesIReportGenerationScheduleService- Scheduled reportsIScheduleEngineService- Schedule executionISymbolListService- Symbol list CRUDISymbolListItemService- Symbol list itemsISymbolListTemplateService- System/customer templatesIReportDashboardService- Report dashboard data
Billing & Payments
IChargeService- Charge recording and creditsIBillingService- Monthly billing orchestrationIInvoiceService- Invoice managementIPaymentService- Payment recordingIStripePaymentService- Stripe API integrationIStripeWebhookService- Webhook event processingICouponCodeService- Coupon management
Files, Messaging & AI
IFileService/IFolderService- File and folder managementIDownloadService- ZIP download queueIMessagingService- Email and SMS queuingIClaudeAnalysisManagementService- AI file analysisIReportComparisonManagementService- Report comparisonIDashboardService- System and account dashboardsIActivityLogEntryService- Activity trackingISystemHealthCheckService- Health monitoringIEtfHoldingsService- ETF holdings data
Data Flow Patterns
Read Operations
- Controller/Page calls Service
- Service queries DbContext
- EF Core executes SQL
- Results mapped to entities
- Data returned to UI
Write Operations
- UI sends data to Service
- Service validates data
- Entity changes tracked
- SaveChanges() commits
- Database updated
EF Core Features
- Code First Migrations
- Lazy Loading
- Change Tracking
- Connection Pooling
- Query Optimization
Configuration
Connection String:
Server=localhost;Database=gmi;
Uid=username;Pwd=password;
Provider: Pomelo MySQL 9.0
Version: EF Core 9.0
Best Practices
- Async/Await patterns
- Proper disposal
- Exception handling
- Transaction management
- Performance monitoring