using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
public static void Main()
AddEntity(new Articolo(){Nome="articolo1"},db);
AddEntity(new Articolo(){Nome="articolo2"},db);
AddEntity(new Ordine(){Numero=1},db);
AddEntity(new Ordine(){Numero=2},db);
Console.WriteLine("Query 1 (articoli)");
db.Base.Local.Where(w=>w.Data>=data&&w.Data<data.AddSeconds(1)).ToList().ForEach(f=> Console.WriteLine($"Data:{f.Data}, Tipo:{f.GetType().Name}, TargetProperty:{f.TargetProperty}"));
Console.WriteLine("Query 2 (tutti)");
db.Base.Local.Where(w=>w.Data>=data).ToList().ForEach(f=>Console.WriteLine($"Data:{f.Data}, Tipo:{f.GetType().Name}, TargetProperty:{f.TargetProperty}"));
Console.WriteLine("Query 3 (ordini)");
db.Base.Local.Where(w=>w.Data>=data.AddSeconds(2)).ToList().ForEach(f=>Console.WriteLine($"Data:{f.Data}, Tipo:{f.GetType().Name}, TargetProperty:{f.TargetProperty}"));
public static void AddEntity<T>(T entity, DB db) where T : Entity
entity.Data = DateTime.Now;
public class DB : DbContext
protected override void OnConfiguring(DbContextOptionsBuilder options)
options.UseSqlite("Data Source=:memory:");
public DbSet<Entity> Base {get;set;}
public DbSet<Articolo> Articoli {get;set;}
public DbSet<Ordine> Ordini {get;set;}
public abstract class Entity
public DateTime Data {get;set;}
public dynamic TargetProperty {get;set;}
public class Articolo: Entity
public string Nome {get{return (string)this.TargetProperty;}set{this.TargetProperty=value;}}
public class Ordine : Entity
public int Numero {get{return (int)this.TargetProperty;}set{this.TargetProperty=value;}}