Серверное приложение Blazor не распознает сущность EF (странно!)C#

Место общения программистов C#
Ответить
Anonymous
 Серверное приложение Blazor не распознает сущность EF (странно!)

Сообщение Anonymous »

Я относительно новичок в Blazor и разрабатываю несколько приложений с использованием .NET 8. Что бы я ни пытался, я не могу заставить EF распознать совершенно допустимую модель, которая отлично работала в его старом приложении MVC. У меня есть база данных с несколькими таблицами, к которым приложение прекрасно подключается для чтения данных и отображения во внешнем интерфейсе.
В настоящее время я успешно записываю в таблицу, но использую

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

_dbContext.Database.ExecuteSqlRawAsync()
а не

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

_dbContext.Add(x);
и

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

await _dbContext.SaveChangesAsync();
Однако мне необходимо использовать EF и модели из-за миграции более крупных приложений в будущем.
Для ясности: моя служба зарегистрирована в пределах:

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

builder.Services.AddDbContext(options => options.UseSqlServer(arcadiaConnectionString));
builder.Services.AddScoped();
С контекстным файлом все в порядке:

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

public class ArcadiaContext : DbContext
{
public ArcadiaContext() { }

public ArcadiaContext(DbContextOptions options) : base(options)
{
Console.WriteLine("Registered Entity Types:");

foreach (var entityType in Model.GetEntityTypes())
{
Console.WriteLine($"- {entityType.ClrType.Name}");
}
}

public DbSet? Item { get; set; }
public DbSet? DrugFormat { get; set; }
public DbSet
? Pack { get; set; }
public DbSet? PackType { get; set; }
public DbSet HistoricalExcelData { get; set; }
public DbSet Gc_ReferenceDrugs { get; set; }
public DbSet ArcadiaLoggings { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasKey(g => new { g.BNF_Drug_ID, g.DmdId, g.VmppId });
}
}
Вот вызываются два интересующих метода. Обратите внимание, что при _dbContext.Add(log);:
происходит сбой.

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

public async Task RemoveDrug(int drugId, long dmdId, string gcukCode, long VmppId)
{
var drugToRemove = _dbContext.Gc_ReferenceDrugs
.Where(x => x.BNF_Drug_ID == drugId && x.DmdId == dmdId.ToString() && x.VmppId == VmppId.ToString())
.FirstOrDefault();

if (drugToRemove != null)
{
await _dbContext.Database.ExecuteSqlRawAsync(
"DELETE FROM Gc_ReferenceDrugs WHERE BNF_Drug_ID = {0} AND DmdId = {1} AND VmppId = {2}",
drugId, dmdId, VmppId);

ArcadiaLogging logObject = new ArcadiaLogging(DateTime.Now, "Remove Drug", _environment, null, $"{gcukCode}-{drugId}-{dmdId}-{VmppId}", null);

await LogAction(logObject);

return 1;
}
else
{
return 0;
}
}

private async Task LogAction(ArcadiaLogging log)
{
try
{
var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
log.User = authState.User.Identity?.Name ?? "Unknown User";

_dbContext.Add(log);

await _dbContext.SaveChangesAsync();
}
catch (Exception ex)
{
Console.WriteLine($"Error in LogAction: {ex.Message}");
Console.WriteLine(ex.StackTrace);
throw;
}
}
Вот ошибка:

Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]

Необработанное исключение в схеме «5oJXt_WWhtJwsWMXhidjCf8cJLSfm_fntT7xHrYtNAk».
System.InvalidOperationException: тип объекта «ArcadiaLogging» не найден. Убедитесь, что тип сущности добавлен в модель.

И наконец, класс модели выглядит следующим образом:

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

public class ArcadiaLogging
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

public string? User { get; set; }
public DateTime? DtTm { get; set; }
public string? Action { get; set; }
public string? IsLive { get; set; }
public string? DrugAdded { get; set; }
public string? DrugRemoved { get; set; }
public string? Download { get; set; }

public ArcadiaLogging() { }

public ArcadiaLogging(DateTime? dtTm, string? action, string? isLive, string? drugAdded, string? drugRemoved, string? download)
{
DtTm = dtTm;
Action = action;
IsLive = isLive;
DrugAdded = drugAdded;
DrugRemoved = drugRemoved;
Download = download;
}
}
Простые вещи, которые всегда помогали мне при работе с приложениями .NET 6 и ASP.NET Core MVC/Web API, но я пробовал много разных вещей. Удалил таблицу журналов и без проблем выполнил добавление еще одной миграции и добавление ее в БД. Я проверил объект _dbContext, и все таблицы из БД являются его элементами, включая таблицу журналирования, в которую я пытаюсь выполнить запись.
Я просто не могу понять, в чем дело. Либо я упускаю что-то глупое, либо способ работы серверных приложений Blazor вызывает некоторые проблемы. Интересно узнать, сталкивались ли другие с этой проблемой вообще.

Подробнее здесь: https://stackoverflow.com/questions/793 ... tity-weird
Ответить

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

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

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

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

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