Я использую контейнер внедрения зависимостей для своего приложения, включая контексты моей базы данных EF. Я недавно узнал, что OnModelCreating не вызывается, потому что я никогда не делаю типичный
using(var contexnt = new MyContext)...
Ригмароль. Конструктор для моего контекста выглядит так:
public UserAccessContext(string connectionString):base(connectionString)
{
this.connectionString = connectionString;
Database.SetInitializer<UserAccessContext>(null);
}
Моя проблема в том, что в моем OnModelCreating я сопоставляю таблицу, имя которой не имеет разумного имени (вне моего контроля), к объекту домена. EF пытается использовать соглашение, чтобы выяснить имя таблицы и неправильно угадать. Как я могу продолжать использовать DI для внедрения зависимости моего контекста, но также гарантировать, что будет вызываться код конфигурации?
Это приложение является базовым приложением .NET, использующим встроенный DI-контейнер для .NET core web api:
services.AddScoped<IUserAccessContext>(_ => new UserAccessContext(userAccessConnectinString));
OnModelСоздание конфигурации
var remediationAuditLogConfig = dbModelBuilder.Entity<RemediationAuditLog>()
.ToTable("dbo.PoorlyNamedTable");
remediationAuditLogConfig.HasKey(x => x.Id);