-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Closed
Feature
Copy link
Labels
Milestone
Description
Tried to do this for value generation using Identity columns with gaps. Possibly just part of #19811, but we should check that this scenario works.
modelBuilder.Entity<Animal>().UseTpcMappingStrategy();
modelBuilder.Entity<Cat>().Property(e => e.Id).ValueGeneratedOnAdd().UseIdentityColumn(1, 3);
modelBuilder.Entity<Dog>().Property(e => e.Id).ValueGeneratedOnAdd().UseIdentityColumn(2, 3);
modelBuilder.Entity<FarmAnimal>().Property(e => e.Id).ValueGeneratedOnAdd().UseIdentityColumn(3, 3);Tables:
CREATE TABLE [Cats] (
[Id] int NOT NULL,
[Species] nvarchar(max) NULL,
[Name] nvarchar(max) NULL,
[EdcuationLevel] nvarchar(max) NULL,
CONSTRAINT [PK_Cats] PRIMARY KEY ([Id])
);
CREATE TABLE [Dogs] (
[Id] int NOT NULL,
[Species] nvarchar(max) NULL,
[Name] nvarchar(max) NULL,
[FavoriteToy] nvarchar(max) NULL,
CONSTRAINT [PK_Dogs] PRIMARY KEY ([Id])
);
CREATE TABLE [FarmAnimals] (
[Id] int NOT NULL,
[Species] nvarchar(max) NULL,
[Value] decimal(18,2) NOT NULL,
CONSTRAINT [PK_FarmAnimals] PRIMARY KEY ([Id])
);Full code:
public abstract class Animal
{
public int Id { get; set; }
public string Species { get; set; }
}
public class FarmAnimal : Animal
{
public decimal Value { get; set; }
}
public abstract class Pet : Animal
{
public string Name { get; set; }
}
public class Cat : Pet
{
public string EdcuationLevel { get; set; }
}
public class Dog : Pet
{
public string FavoriteToy { get; set; }
}
public class SomeDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseSqlServer(Your.ConnectionString)
.LogTo(Console.WriteLine, LogLevel.Information)
.EnableSensitiveDataLogging();
public DbSet<Animal> Animals { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Animal>().UseTpcMappingStrategy();
modelBuilder.Entity<Cat>().Property(e => e.Id).ValueGeneratedOnAdd().UseIdentityColumn(1, 3);
modelBuilder.Entity<Dog>().Property(e => e.Id).ValueGeneratedOnAdd().UseIdentityColumn(2, 3);
modelBuilder.Entity<FarmAnimal>().Property(e => e.Id).ValueGeneratedOnAdd().UseIdentityColumn(3, 3);
}
}
public class Program
{
public static void Main()
{
using (var context = new SomeDbContext())
{
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
context.AddRange(
new Cat {Name = "Alice", Species = "Felis catus", EdcuationLevel = "MBA"},
new Cat {Name = "Mac", Species = "Felis catus", EdcuationLevel = "BA"},
new Dog {Name = "Toast", Species = "Canis familiaris", FavoriteToy = "Mr. Squirrel"},
new FarmAnimal {Value = 100.0m, Species = "Ovis aries"});
context.SaveChanges();
}
}
}Reactions are currently unavailable