Sto cercando di creare una semplice relazione uno-a-molti in C # usando Entity Framework Core, il problema è simile a un problema di riferimento circolare ma non viene lanciata alcuna eccezione.
Le mie classi modello sono:
[Table("Restaurantes")]
public class Restaurante
{
public int Id { get; set; }
public string Descricao { get; set; }
public List<Prato> Pratos { get; set; }
}
[Table("Pratos")]
public class Prato
{
public int Id { get; set; }
public string Descricao { get; set; }
public decimal Preco { get; set; }
[ForeignKey("RestauranteForeignKey")]
public Restaurante Restaurante { get; set; }
}
// One Prato (Dish) belongs to One Restaurant and one Restaurant can have many Dishes (Pratos)
Sto restituendo i Pratos da DB e voglio che ritorni anche con il loro rispettivo ristorante:
context.Pratos.Include(r => r.Restaurante).ToList();
La definizione del contesto:
public class Contexto : DbContext
{
public DbSet<Restaurante> Restaurantes { get; set; }
public DbSet<Prato> Pratos { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Prato>()
.HasOne(p => p.Restaurante)
.WithMany(r => r.Pratos)
.OnDelete(DeleteBehavior.Cascade);
}
}
Ma sul browser, il JSON restituito è qualcosa del tipo:
[ {"id":1,"descricao":"prato 1","preco":1.50,"restaurante":{"id":1,"descricao":"fulano","pratos":[
Non restituisce altro. Ho anche provato la documentazione ma non mi ha aiutato in termini di questo problema. Grazie in anticipo.
Se si utilizza Json.net , probabilmente è necessario modificare DefaultSettings
per gestire la serializzazione
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
O in base alle tue esigenze particolari
- Nessuno : non conservare i riferimenti durante la serializzazione dei tipi.
- Oggetti : conserva i riferimenti durante la serializzazione in una struttura di oggetti JSON.
- Matrici : conserva i riferimenti durante la serializzazione in una struttura di array JSON.
- Tutto : conserva i riferimenti durante la serializzazione.
- Errore : lanciare una JSONSerializationException quando si incontra un loop.
- Ignora : ignora i riferimenti del ciclo e non serializza.
- Serializzare : serializza i riferimenti del ciclo.