При попытке создать миграцию я получаю следующую ошибку:
Невозможно создать «DbContext» типа «AppDbContext». Исключение «Не удалось определить зависимую сторону для однозначного отношения между «Truck.Driver» и «Driver.Truck». Чтобы определить зависимую сторону связи, настройте свойство внешнего ключа. Если эти переходы не должны быть частью одного и того же отношения, настройте их независимо с помощью отдельных цепочек методов в «OnModelCreating». Дополнительную информацию см. на https://go.microsoft.com/fwlink/?LinkId=724062». был выброшен при попытке создать экземпляр. Информацию о различных шаблонах, поддерживаемых во время разработки, см. на странице https://go.microsoft.com/fwlink/?linkid=851728
Это следующие классы. :
Код: Выделить всё
public class DriverEntity : Entity
{
public string FirstName { get; set; } = string.Empty;
public string? MiddleName { get; set; }
public string LastName { get; set; } = string.Empty;
public TruckEntity? CurrentTruck { get; set; }
}
Код: Выделить всё
public class TruckEntity : Entity
{
public string Registration { get; set; } = string.Empty;
public int? TrailerId { get; set; }
public TrailerEntity? Trailer { get; set; }
public int? DriverId { get; set; }
public DriverEntity? CurrentDriver { get; set; }
public List Trips { get; set; } = [];
Они являются производными от класса Entity:
Код: Выделить всё
public abstract class Entity
{
public int Id { get; set; }
public bool IsDeleted { get; set; }
public DateTime CreatedDate { get; set; } = DateTime.UtcNow;
public DateTime? ModifiedDate { get; set; }
public string? ModifiedBy { get; set; }
}
Код: Выделить всё
public class DriverConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(d => d.Id);
builder.Property(d => d.FirstName)
.IsRequired()
.HasMaxLength(50);
builder.Property(d => d.LastName)
.IsRequired()
.HasMaxLength(50);
}
}
Код: Выделить всё
public class TruckConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(t => t.Id);
builder.HasOne(t => t.Trailer)
.WithOne(t => t.Truck)
.HasForeignKey(tr => tr.TrailerId)
.IsRequired(false);
builder.HasOne(t => t.CurrentDriver)
.WithOne(t => t.CurrentTruck)
.HasForeignKey(t => t.DriverId)
.OnDelete(DeleteBehavior.Restrict)
.IsRequired(false);
builder.HasMany(t => t.Trips)
.WithOne()
.HasForeignKey(t => t.TruckId)
.OnDelete(DeleteBehavior.Restrict);
builder.Property(t => t.Registration)
.IsRequired()
.HasMaxLength(15);
}
}
Почему эта ошибка может повторяться, даже если она настроена правильно?
Кроме того, аналогичная связь возникает с грузовиком и прицепом, но я думаю, что EF Core сначала обнаруживает проблему с соотношением водитель-грузовик.
Подробнее здесь: https://stackoverflow.com/questions/793 ... to-one-rel
Мобильная версия