Ho un modello chiamato TypeListItem
con tre proprietà (Id, TypeListId, Name)
che contiene un gruppo di liste.
Per esempio:
ProductType: forte, debole, medio
Categoria di prodotto: categoria 1, categoria 2, categoria 3
Ho un modello di prodotto che assomiglia a questo:
public int Id {get; set;}
public string Name {get; set;}
public int ProductTypeId {get; set;}
public int ProductCategoryId {get; set;}
// Navigation Properties
public TypeListItem ProductType {get; set;}
public TypeListItem ProductCategory {get; set;}
Tuttavia, quando vado ad aggiungere una migrazione e poi l' dotnet ef database update
'ottengo un errore:
Introduzione al vincolo FOREIGN KEY: FK_Product_TypeListItem_ProductCategoryId sulla tabella 'Prodotto' può causare cicli o più percorsi a cascata.
Ho anche il seguente utilizzo di API fluente:
builder.Entity<Product>()
.Property(p => p.ProductTypeId)
.IsRequired();
builder.Entity<Product>()
.Property(p => p.ProductCategoryId)
.IsRequired();
Credo che l'errore sia dovuto al fatto che ho due proprietà di navigazione che utilizzano lo stesso oggetto ed entrambe sono obbligatorie.
Qualche consiglio? C'è qualcosa che non va nella mia modella?
Qualcosa di simile ha senso per ef core?
builder.Entity<Product>()
.HasOne(p => p.ProductType)
.WithOne().OnDelete(DeleteBehavior.Restrict);
builder.Entity<Product>()
.HasOne(p => p.ProductCategory)
.WithOne().OnDelete(DeleteBehavior.Restrict);
È necessario utilizzare OnDelete(DeleteBehavior.Restrict)
come mostrato di seguito.
Nota :
Limita: l'operazione di cancellazione non viene applicata alle entità dipendenti. Le entità dipendenti rimangono invariate.
builder.Entity<Product>()
.Property(p => p.ProductTypeId)
.WithOne()
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Product>()
.Property(p => p.ProductCategoryId)
.WithOne()
.OnDelete(DeleteBehavior.Restrict);
Puoi vedere di più qui: Elimina Cascade