Наше приложение использует подход TPT в одной из наших моделей. Я прочитал все статьи, связанные с TPT, и некоторые вопросы по SO, но, похоже, это не дает решения моей проблемы.
У меня есть пример кода, основанный на этой статье.
Код: Выделить всё
public class TPTUser
{
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
}
public class TPTStudent : TPTUser
{
public string CGPA { get; set; }
public string Major { get; set; }
}
public class TPTTeacher : TPTUser
{
public string Designation { get; set; }
public string Speciality { get; set; }
}
Код: Выделить всё
public class TestContext : DbContext
{
public DbSet TPTUsers { get; set; }
public DbSet TPTStudents { get; set; }
public DbSet TPTTeachers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Foo");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable("TPTUsers");
modelBuilder.Entity()
.HasKey(p => p.Id);
modelBuilder.Entity()
.Property(p => p.Id)
.ValueGeneratedOnAdd()
.UseIdentityColumn();
modelBuilder.Entity().ToTable("TPTStudents");
modelBuilder.Entity().ToTable("TPTTeachers");
}
}
Это код для добавления TPTStudent:
Код: Выделить всё
static void Main(string[] args)
{
using (var context = new TestContext())
{
var std = new List
{
new TPTStudent()
{
Id = 422,
Username = Guid.NewGuid().ToString("N"),
Email = Guid.NewGuid().ToString("N"),
CGPA = Guid.NewGuid().ToString("N"),
Major = Guid.NewGuid().ToString("N")
},
new TPTStudent()
{
Id = 412,
Username = Guid.NewGuid().ToString("N"),
Email = Guid.NewGuid().ToString("N"),
CGPA = Guid.NewGuid().ToString("N"),
Major = Guid.NewGuid().ToString("N")
}
};
context.TPTStudents.AddRange(std);
context.SaveChanges();
}
}
Код: Выделить всё
Cannot insert explicit value for identity column in table 'TPTUsers' when IDENTITY_INSERT is set to OFF
Моя главная цель — успешно добавить эти объекты, а EF Core игнорирует значение свойства Id. Значения для Id должны генерироваться в базе данных, поскольку в ее столбце установлено значение IDENTITY.
Я пробовал использовать ValueGeneratedOnAdd,
Код: Выделить всё
UseIdentityColumn
Если то, чего я хочу достичь, невозможно, то это мое последнее средство будет такой подход.
EDIT: я нашел этот вопрос SO, и это именно то, что мне нужно. Кто-нибудь знает, как реализовать это в EF Core v6?
Подробнее здесь: https://stackoverflow.com/questions/726 ... t-approach