我有一个 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、数据和博客模型,然后进入帖子并返回博客模型一遍又一遍,直到死去。
尝试关闭延迟加载来修复EF引用循环异常的问题:
context.Configuration.LazyLoadingEnabled = false;