我试图使用Entity Framework Core在C#中创建一个简单的一对多关系,该问题类似于循环引用问题,但没有抛出任何异常。
我的模型类是:
[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)
我从DB返回Pratos,我希望它也可以返回各自的餐厅:
context.Pratos.Include(r => r.Restaurante).ToList();
上下文定义:
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);
}
}
但是在浏览器上,返回的JSON类似于:
[ {"id":1,"descricao":"prato 1","preco":1.50,"restaurante":{"id":1,"descricao":"fulano","pratos":[
它返回的不多于此。我也试过documentation,但在这个问题方面没有帮助。提前谢谢。
答案 0 :(得分:2)
如果您使用的是Json.net,则可能需要更改DefaultSettings
以处理序列化
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.All,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
或取决于您的特定要求
- 无:序列化类型时不要保留引用。
- 对象:在序列化为JSON对象结构时保留引用。
- 数组:在序列化为JSON数组结构时保留引用。
- 全部:序列化时保留引用。
- 错误:遇到循环时抛出JsonSerializationException。
- 忽略:忽略循环引用,不进行序列化。
- 序列化:序列化循环引用。