.NET 实体框架创建引用循环并失败

问题描述 投票:0回答:1

我有一个 Blazor WASM 核心托管应用程序,我正在尝试使用实体框架设置一对多(多个可选)。 但这会导致循环引用错误,我不确定为什么。 这是我所拥有的:

型号:

 public class Blog 
 {
     public int Id { get; set; }
     [Required] public string BlogName{ get; set; } = string.Empty;
     public ICollection<Post> Posts { get; set; }
 }
 public class Post
 {
     public int Id { get; set; }      
     public int BlogId{ get; set; }
     public Blog Blog{ get; set; }       
 }

数据库上下文:

modelBuilder.Entity<Blog>()
      .HasMany(d => d.Post)
      .WithOne(o => o.Blog)
      .HasForeignKey(o => o.BlogId);

然后我在控制器中进行如下调用:

[HttpGet("get-blog-with-posts/{blogId}")]
public async Task<ActionResult<ServiceResponse<Blog>>> GetBlogWithPosts(int blogId)
{
   var options = await this._blogService.GetBlogWithPosts(blogId);
   return Ok(options);  //loop starts here
}

我的服务看起来像这样:

public async Task<ServiceResponse<Blog>> GetBlogWithPosts(int blogId)
{
  var blog= await _context.Blog.Include(p => p.Posts).FirstOrDefaultAsync(x => x.Id == blogId);
  if (blog == null)
  {
    return new ServiceResponse<Blog> { Success = false, Message = "Blog Not Found." };
  }
  var response = new ServiceResponse<Blog>
  {
     Data = blog,
     Success = true
  };
  return response;
}

我的服务响应包装如下所示:

public class ServiceResponse<T>
{
   public T? Data { get; set; }
   public bool Success { get; set; } = false;
   public string Message { get; set; } = String.Empty;
}

当它运行时,我在控制器处进入一个循环,当它尝试返回结果时,它将进入我的 ServiceResponse、数据和博客模型,然后进入帖子并返回博客模型一遍又一遍,直到死去。

.net entity-framework blazor blazor-webassembly
1个回答
0
投票

尝试关闭延迟加载来修复EF引用循环异常的问题:

context.Configuration.LazyLoadingEnabled = false;
© www.soinside.com 2019 - 2024. All rights reserved.