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

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

Сообщение Anonymous »

Недавно я перенес свое приложение WPF на .Net9 и очень хотел опробовать новые функции времени компиляции для EF.
Моя установка выглядит следующим образом:
  • У меня есть еще один файл, реализующий остальную часть частичного класса 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 не теряли логику строки подключения (поскольку строка подключения загружается динамически с диска) при обновлении моделей.
  • Я также установил конфигурацию в файле .csproject для создания моделей времени компиляции при сборке приложения:

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

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

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

Unable to create a 'DbContext' of type 'Schule_als_Staat_DbContext'.
The exception 'The calling thread must be STA, because many UI components require this.'
was thrown while attempting to create an instance.
For the different patterns supported at design time, see 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()». в dbContext, но также есть предварительно скомпилированные модели.
Кто-нибудь знает, как это исправить? Хотя это довольно новая технология.

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

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

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

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

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

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