# 🏗 خطة متكاملة لإضافة دعم Code First + توليد Migrations تلقائيًا
## لمشروع GeneratorCode
---
# 🎯 الهدف الاستراتيجي
تمكين GeneratorCode من دعم مسار جديد بالكامل:
> المستخدم يصمم الكيانات داخل النظام →
> يتم توليد كود EF Core →
> يتم توليد Migration تلقائيًا →
> يتم تطبيقه على قاعدة البيانات.
ليصبح النظام ثنائي الاتجاه:
Database First ⇄ Code First
---
# 🧠 الرؤية المعمارية
حاليًا النظام يعمل كالتالي:
Database → Metadata → Code Generation
سيتم إضافة مسار جديد:
Entity Designer → Domain Model → DbContext → Migration → Database Update
وسيتم دعم وضعين تشغيل:
```csharp
public enum GenerationMode
{
DatabaseFirst,
CodeFirst
}
محرك داخلي لبناء نموذج المجال (Entities + Relations).
واجهة مرئية لإنشاء الجداول والخصائص والعلاقات.
توليد:
- Entities
- DbContext
- Fluent Configuration
إدارة:
- Add Migration
- Update Database
- Rollback
- Script Generation
دمج Code First داخل Pipeline الحالي.
إنشاء تمثيل داخلي كامل للكيانات والعلاقات.
public class DomainModel
{
public List<DomainEntity> Entities { get; set; } = new();
}public class DomainEntity
{
public string Name { get; set; }
public List<DomainProperty> Properties { get; set; } = new();
public List<DomainRelation> Relations { get; set; } = new();
}public class DomainProperty
{
public string Name { get; set; }
public string Type { get; set; }
public bool IsRequired { get; set; }
public bool IsPrimaryKey { get; set; }
public bool IsIdentity { get; set; }
public int? MaxLength { get; set; }
}public class DomainRelation
{
public string SourceEntity { get; set; }
public string TargetEntity { get; set; }
public RelationType RelationType { get; set; }
}IDomainModelServiceDomainModelService
المسؤوليات:
- إضافة/حذف/تعديل Entity
- إدارة العلاقات
- التحقق من صحة النموذج
- حفظ إلى
Resources/domain-model.json - تحميل النموذج عند بدء التشغيل
تمكين المستخدم من تصميم قاعدة البيانات بصريًا.
Forms/FrmEntityDesigner.cs
-
إنشاء Entity
-
إضافة Property
-
تحديد:
- النوع (int, string, decimal, DateTime...)
- Required
- Primary Key
- Identity
-
تعريف العلاقات (One-to-Many / Many-to-Many)
- منع تكرار أسماء الخصائص
- منع أكثر من PK بدون Composite Support
- التحقق من العلاقات
- Export JSON
- Import JSON
تحويل DomainModel إلى مشروع EF Core جاهز.
ICodeFirstGeneratorEfCoreCodeFirstGenerator
- دعم Data Annotations
- دعم Navigation Properties
public class AppDbContext : DbContext
{
public DbSet<Order> Orders { get; set; }
}modelBuilder.Entity<Order>()
.HasOne(o => o.Customer)
.WithMany(c => c.Orders)
.HasForeignKey(o => o.CustomerId);إضافة:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools
- Provider حسب قاعدة البيانات
إدارة Migrations برمجيًا.
استخدام dotnet CLI عبر Process:
dotnet ef migrations add InitialCreate
dotnet ef database updatepublic interface IMigrationService
{
Task AddMigrationAsync(string name);
Task UpdateDatabaseAsync();
Task RollbackAsync(string migrationName);
Task GenerateScriptAsync(string from, string to);
}EfCoreMigrationService- التقاط stdout/stderr
- تسجيل النتائج في Logging System
تحكم احترافي في دورة حياة المخطط.
-
عرض قائمة Migrations الحالية
-
دعم:
- Remove Last Migration
- Rollback To Version
-
عرض SQL Script قبل التنفيذ
-
دعم Generate Script Only Mode
-
دعم Apply Migration Only Mode
تكامل كامل مع النظام الحالي.
إضافة:
public GenerationMode Mode { get; set; }إذا Mode == CodeFirst:
- Skip LoadMetadataStage
- Execute LoadDomainModelStage
--mode codefirst
--migration-name Init
--apply-migration
عرض الفرق بين النسختين قبل التنفيذ.
توليد Seed داخل OnModelCreating.
إضافة BaseEntity تلقائيًا.
تصدير المخطط الكامل إلى JSON.
- Async Process Execution
- Parallel Code Generation
- Cache للـ DomainModel
- Path Sanitization
- Validation ضد Code Injection
- منع تنفيذ أوامر خارجية غير آمنة
لا تربطه مباشرة بـ CLI. استخدم Abstraction واضحة.
يمرر:
- ProviderName
- ConnectionString
- TargetFramework
Code First يجب ألا يؤثر على Database First.
| المقياس | الهدف |
|---|---|
| إنشاء مشروع Code First | < 30 ثانية |
| توليد Migration | < 5 ثواني |
| Update Database | بدون أخطاء |
| UI | بدون تجمّد |
| Test Coverage | ≥ 60% |
بعد تنفيذ الخطة سيكون GeneratorCode:
- يدعم Database First
- يدعم Code First
- يولد Migrations تلقائيًا
- يطبق التحديثات مباشرة
- يدير إصدارات المخطط
- منصة متكاملة لإدارة دورة حياة قاعدة البيانات
- Hybrid Sync (Code ↔ Database)
- Visual ER Diagram Designer
- Live Schema Diff Engine
- CI/CD Migration Mode
- Multi-Project Code First
انتهت الخطة الكاملة.