У меня работает WebApi. NET Core 3.0, EF Core 3.0 и использование MediatR. Два из его доменов - Food
и FoodType
с соответствующими им DataSet
с отношением 1: 1. Выполнение приведенной ниже строки кода зависает / не срабатывает (я не уверен, что именно происходит, но оно переходит к строке return
кода). Обратите внимание, что запрос набора данных Foods
работает просто отлично. Также обратите внимание, что в таблице FoodTypes
есть записи.
public async Task<Unit> Handle(CreateFoodType request, CancellationToken cancellationToken)
{
var foodType = await _context.FoodTypes.FirstOrDefaultAsync(type => type.Id == request.FoodTypeId);
if (foodType == null)
throw new Exception();
//...bla bla bla
return new Unit();
}
Ниже приведен фрагмент кода / конфигурации. Мы будем благодарны за любую помощь.
public class Food
{
public Guid Id { get; set; }
public int AverageWeight { get; set; }
//...
public virtual int FoodTypeId { get; set; }
public virtual FoodType FoodType { get; set; }
}
public class FoodType
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Food Food { get; set; }
}
... и класс DBContext
public class DataContext : DbContext
{
public DbSet<Food> Foods { get; set; }
public DbSet<FoodType> FoodTypes { get; set; }
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Food>()
.HasOne(f => f.FoodType)
.WithOne(ft => ft.Food)
.HasForeignKey<Food>(f => f.FoodTypeId);
}
}
Редактирование: добавление трассировки стека исключений:
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(Boolean errorsExpected, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnectionAsync(Boolean errorsExpected, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.RelationalShapedQueryCompilingExpressionVisitor.AsyncQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.FirstOrDefaultAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.FirstOrDefaultAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)
at Features.Foods.CreateFoodCommand.CreateRequestHandler.Handle(CreateFoodCommand request, CancellationToken cancellationToken) in [...redacted]