Я работаю над приложением WPF, написанным на C#, которому необходимо хранить некоторые данные в базе данных. Для хранения этих данных я хочу использовать Entity Framework Core. Приложение будет использовать общий экземпляр базы данных, который также используется другими приложениями. Каждое приложение имеет свой собственный префикс таблицы, поэтому мое приложение также должно иметь собственный префикс таблицы.
Обновить
Я хочу добиться того, чтобы все объекты, унаследованные от Parent, хранились в одной таблице. Когда я «загружаю» данные из таблицы, мне нужен экземпляр класса Child. Невозможно/невозможно иметь экземпляры Parent.
Добавить префикс таблицы
I добавил префиксы таблиц в функцию OnModelCreating моего класса DbContext (пока это работает отлично):
Код: Выделить всё
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
modelBuilder.Entity(entity.ClrType).ToTable(tablePrefix + entity.GetTableName());
}
После реализации префикса таблицы я реализовал TPH в соответствии с этим описанием https. ://www.learnentityframeworkcore.com/inheri ... -hierarchy
Это реализация:
Код: Выделить всё
public abstract class Parent
{
// ...
}
public class ChildA : Parent
{
// ...
}
public class ChildB : Parent
{
// ...
}
internal class EcroDbContext : DbContext
{
private string tablePrefix = "APP_PREFIX_";
public DbSet Schedules { get; set; } = null;
public DbSet ChildA { get; set; } = null;
public DbSet ChildB { get; set; } = null;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string user = "xxx";
string password = "xxx";
string dbName = "xxx";
string conString = "User Id=" + user + ";Password=" + password + ";Data Source=" + dbName;
optionsBuilder.UseOracle(conString, x => x.MigrationsHistoryTable(tablePrefix + "ef_migration_history", null));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity
().ToTable(tablePrefix + "Jobs");
// Add prefix to each table.
// When I remove this foreach, the TPH works fine
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
modelBuilder.Entity(entity.ClrType).ToTable(tablePrefix + entity.GetTableName());
}
}
}
Невозможно создать 'DbContext' типа ''. Исключение «Оба «ChildB» и «ChildA» сопоставлены с таблицей «APP_PREFIX_APP_PREFIX_APP_PREFIX_Jobs». Все типы сущностей в иерархии, отличной от TPH (без дискриминатора), должны быть сопоставлены с разными таблицами.
Ошибка гласит, что «все типы сущностей в не-TPH должны сопоставлять другую таблицу», но я думал, что реализовал TPH для упомянутых классов. Сначала я думал, что реализовал это неправильно, но когда я удаляю часть префикса таблицы из части OnModelCreating, кажется, все работает нормально.
Это означает, что реализация префикса таблицы вызывает проблемы с реализацией TPH. Как устранить эту ошибку?
[РЕШЕНО]
Я заметил, что префикс добавляется 3 раза для Таблица вакансий. Как я могу это решить?
Подробнее здесь: https://stackoverflow.com/questions/779 ... mework-cor