Sto avendo problemi ad aggiornare il database delle mie classi nel database.
Qualcuno sa come risolverlo?
L'introduzione del vincolo FOREIGN KEY "FK_Sale_Service_Service_ServiceId" sulla tabella "Sale_Service" può causare cicli o più percorsi a cascata. Specificare ON DELETE NO ACTION o ON UPDATE NO ACTION o modificare altri vincoli FOREIGN KEY.
ENTITÀ
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; }
}
MAPPATURE
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});
}
}
PARTE DELLO SCRIPT
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);
});
Ho trovato una soluzione.
Il problema era con la Categoria, entrambi avevano una chiave esterna per la stessa tabella con una cascata di cancellazione, quindi, se ho cancellato una categoria, saranno interessate le seguenti tabelle.
Vendita , servizio
E, cosa più importante, SaleService (Join table)
La mia soluzione era molto semplice, ho appena creato una categoria per ognuno.
VenditaCategoria e servizioCategoria.