Как генерировать модели Entity Framework Core во время компиляции с использованием .NET 9?C#

Место общения программистов C#
Ответить
Anonymous
 Как генерировать модели Entity Framework Core во время компиляции с использованием .NET 9?

Сообщение Anonymous »

Недавно я перенес свое приложение WPF на .NET 9 и очень хотел опробовать новые функции времени компиляции для EF Core.
Моя настройка выглядит следующим образом: у меня есть файл который реализует остальную часть частичного класса DbContext:

Код: Выделить всё

public partial class Schule_als_Staat_DbContext : DbContext
{
public Schule_als_Staat_DbContext()
{ }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Wenn bereits konfiguriert wurde, brauchen wir nicht nochmal
if (optionsBuilder.IsConfigured)
return;

DatenbankInfos? dbInfos = ConnectionInfoService.DatenbankInfos;

// Wenn dbInfo null ist, wird Benutzer auf Server-Info-Seite weitergeleitet
if (dbInfos == null)
{
Navigator.NavigateToPage(new ServerInformationenEntryPage());
return;
}

string dbConnectString = dbInfos.GetConnectString();
optionsBuilder.UseSqlServer(dbConnectString);
}
}
Это сделано для того, чтобы мои модели EF Core не теряли логику строки подключения (поскольку строка подключения загружается динамически с диска) при обновлении моделей.
Я также установил конфигурацию в файле проекта .csproj для создания моделей времени компиляции при сборке приложения:

Код: Выделить всё

true
build
Однако при сборке приложения я получаю следующую ошибку:

Невозможно создать «DbContext» типа «Schule_als_Staat_DbContext».
Исключение «Вызывающий поток должен быть STA, поскольку этого требуют многие компоненты пользовательского интерфейса».

Это было выдано при пытаясь создать экземпляр.
Информацию о различных шаблонах, поддерживаемых во время разработки, см. на странице https://go.microsoft.com/fwlink/?linkid=851728
В документации по ссылке указано, что мне нужно настроить что-то вроде этого:

Код: Выделить всё

public class SaSDesignTimeFactory : IDesignTimeDbContextFactory
{
public Schule_als_Staat_DbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer("Server=localhost\\SQLEXPRESS;Database=schule-als-staat;Trusted_Connection=True;TrustServerCertificate=True;");

return new Schule_als_Staat_DbContext(optionsBuilder.Options);
}
}
Что я и сделал, но все равно получил ту же ошибку.
Моя цель — обеспечить динамическую загрузку строки подключения через OnConfiguring()< /code> в DbContext, но также имеет предварительно скомпилированные модели.
Кто-нибудь знает, как это исправить? Хотя это довольно новая технология.

Подробнее здесь: https://stackoverflow.com/questions/792 ... sing-net-9
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»