using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
internal abstract class Document
public DateTime Created { get; init; }
protected void Configure<T>(EntityTypeBuilder<T> builder) where T: Document
builder.Property(d => d.Created)
.HasColumnName("created");
internal sealed class Version : Document, IEntityTypeConfiguration<Version>
public int Id { get; set; }
public void Configure(EntityTypeBuilder<Version> builder)
builder.ToTable("version").HasKey(v => v.Id);
builder.Property(v => v.Id)
.HasColumnName("version_id")
internal sealed class V2 : Document, IEntityTypeConfiguration<V2>
public string Id { get; set; }
public void Configure(EntityTypeBuilder<V2> builder)
builder.ToTable("version").HasKey(v => v.Id);
builder.Property(v => v.Id)
.HasColumnName("version_id")
internal class Context : DbContext
public DbSet<Version> Version { get; init; }
public DbSet<V2> V2 { get; init; }
protected override void OnConfiguring(DbContextOptionsBuilder builder)
base.OnConfiguring(builder);
builder.UseInMemoryDatabase("test");
protected override void OnModelCreating(ModelBuilder builder)
base.OnModelCreating(builder);
builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
public static void Main()
ctx.Add(new Version() { Id = 1, Created = DateTime.UtcNow });
ctx.Add(new Version() { Id = 2, Created = DateTime.UtcNow });
ctx.Add(new V2() { Id = "ajdi", Created = DateTime.UtcNow });
ctx.Add(new V2() { Id = "tudi", Created = DateTime.UtcNow });
ctx.Version.ToList().ForEach(v => Console.WriteLine($"{v.Id}, {v.Created}"));
ctx.V2.ToList().ForEach(v => Console.WriteLine($"{v.Id}, {v.Created}"));