У меня возникают проблемы с обновлением базы данных моих классов в базе данных.
Кто-нибудь знает, как его решить?
Представление ограничения FOREIGN KEY «FK_Sale_Service_Service_ServiceId» в таблице «Sale_Service» может вызывать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
СУБЪЕКТЫ
public class Sale
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
public IList<ProductSale> Products { get; set; }
public IList<SaleService> Services { get; set; }
public Sale()
{
Products = new List<ProductSale>();
Services = new List<SaleService>();
}
}
public class Service
{
public int Id { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public float Duration { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
public IList<ServiceProfessional> Professionais { get; set; }
public IList<SaleService> Sales { get; set; }
public IList<ScheduleService> Schedules { get; set; }
public Service()
{
Professionais = new List<ServiceProfessional>();
Sales = new List<SaleService>();
Schedules = new List<ScheduleService>();
}
}
public class SaleService
{
public int SaleId { get; set; }
public Sale Sale { get; set; }
public int ServiceId { get; set; }
public Service Service { get; set; }
}
ОТОБРАЖЕНИЯ
public class SaleConfiguration : IEntityTypeConfiguration<Sale>
{
public void Configure(EntityTypeBuilder<Sale> builder)
{
builder.ToTable("Sale");
builder
.Property(c => c.Id)
.IsRequired();
builder
.Property(c => c.Name)
.HasMaxLength(40)
.IsRequired();
builder
.Property(c => c.StartDate)
.IsRequired();
builder
.Property(c => c.EndDate)
.IsRequired();
}
}
public class ServiceConfiguration : IEntityTypeConfiguration<Service>
{
public void Configure(EntityTypeBuilder<Service> builder)
{
builder.ToTable("Service");
builder
.Property(c => c.Id)
.IsRequired();
builder
.Property(c => c.Description)
.HasMaxLength(40)
.IsRequired();
builder
.Property(c => c.Price)
.HasColumnType("money")
.IsRequired();
builder
.Property(c => c.Duration)
.IsRequired();
}
}
public class SaleServiceConfiguration:IEntityTypeConfiguration<SaleService>
{
public void Configure(EntityTypeBuilder<SaleService> builder)
{
builder.ToTable("Sale_Service");
builder.HasKey(c => new {c.ServiceId, c.SaleId});
}
}
ЧАСТЬ СКРИПТА
migrationBuilder.CreateTable(
name: "Sale_Service",
columns: table => new
{
ServiceId = table.Column<int>(nullable: false),
SaleId = table.Column<int>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Sale_Service", x => new { x.ServiceId, x.SaleId });
table.ForeignKey(
name: "FK_Sale_Service_Sale_SaleId",
column: x => x.SaleId,
principalTable: "Sale",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Sale_Service_Service_ServiceId",
column: x => x.ServiceId,
principalTable: "Service",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
Я нашел решение.
Проблема была в категории, оба из них имели внешний ключ в одной таблице с каскадом delete, поэтому, если бы я удалил категорию, будут затронуты следующие таблицы.
Продажа , Сервис
И самое главное, SaleService (Join table)
Мое решение было очень простым, я просто создал категорию для каждого.
ПродажаКатегория и сервисКатегория.