using System; using System.Collections.Generic; using System.Text.Json; using Microsoft.EntityFrameworkCore; using RulesEngine.Models; namespace DemoApp.EFDataExample { public class RulesEngineDemoContext : DbContext { public DbSet WorkflowRules { get; set; } public DbSet ActionInfos { get; set; } public DbSet RuleActions { get; set; } public DbSet Rules { get; set; } public DbSet ScopedParams { get; set; } public string DbPath { get; private set; } public RulesEngineDemoContext() { var folder = Environment.SpecialFolder.LocalApplicationData; var path = Environment.GetFolderPath(folder); DbPath = $"{path}{System.IO.Path.DirectorySeparatorChar}RulesEngineDemo.db"; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite($"Data Source={DbPath}"); protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity() .Property(b => b.Context) .HasConversion( v => JsonSerializer.Serialize(v, null), v => JsonSerializer.Deserialize>(v, null)); modelBuilder.Entity() .HasKey(k => k.Name); modelBuilder.Entity() .HasKey(k => k.Name); modelBuilder.Entity(entity => { entity.HasKey(k => k.WorkflowName); }); modelBuilder.Entity(entity => { entity.HasNoKey(); entity.HasOne(o => o.OnSuccess).WithMany(); entity.HasOne(o => o.OnFailure).WithMany(); }); modelBuilder.Entity(entity => { entity.HasKey(k => k.RuleName); entity.Property(b => b.Properties) .HasConversion( v => JsonSerializer.Serialize(v, null), v => JsonSerializer.Deserialize>(v, null)); entity.Ignore(e => e.Actions); }); modelBuilder.Entity() .Ignore(b => b.WorkflowRulesToInject); modelBuilder.Entity() .Ignore(b => b.WorkflowRulesToInject); } } }