我有一个带有ArticleAuthors字段的文章模型:
public virtual ICollection<ArticleAuthor> ArticleAuthors
{
get; set;
}
我的ArticleAuthor类看起来像这样
public class ArticleAuthor : BaseEntity
{
public Guid ArticleId { get; set; }
public Article Article { get; set; }
public Guid AuthorId { get; set; }
public Author Author { get; set; }
}
作者类
public class Author : BaseEntity
{
public string Name { get; set; }
public string Email { get; set; }
public ICollection<ArticleAuthor> ArticleAuthors { get; set; }
}
和BaseEntity
public class BaseEntity
{
public Guid ID { get; set; }
[Timestamp]
public byte[] Timestamp { get; set; }
public BaseEntity()
{
ID = Guid.NewGuid();
}
}
使用Fluent API定义了多对多关系
modelBuilder.Entity<ArticleAuthor>()
.HasKey(bc => new {bc.ArticleId, bc.AuthorId});
modelBuilder.Entity<ArticleAuthor>()
.HasOne(bc => bc.Article)
.WithMany(b => b.ArticleAuthors)
.HasForeignKey(bc => bc.ArticleId);
modelBuilder.Entity<ArticleAuthor>()
.HasOne(bc => bc.Author)
.WithMany(c => c.ArticleAuthors)
.HasForeignKey(bc => bc.AuthorId);
我定义了一个Web服务来加载文章
[HttpGet("{id}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesDefaultResponseType]
public async Task<ActionResult<Article>> GetArticle([FromRoute] Guid id)
{
Article article = await _dbContext.Articles
.Include(x => x.MainPictureFile)
.FirstOrDefaultAsync(x => x.ID == id);
if (article == null)
{
return NoContent();
}
return Ok(article);
}
它非常有效,直到我尝试使用EagerLoading加载ArticleAuthors字段
[HttpGet("{id}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesDefaultResponseType]
public async Task<ActionResult<Article>> GetArticle([FromRoute] Guid id)
{
Article article = await _dbContext.Articles
.Include(x => x.MainPictureFile)
.Include(x => x.ArticleAuthors)
.FirstOrDefaultAsync(x => x.ID == id);
if (article == null)
{
return NoContent();
}
return Ok(article);
}
当我这样做时,返回的JSON在 articleId 之后被截断:
{"title":"Editorial updated","chapo":null,"body":null,"readingTime":null,"edition":null,"date":null,"theme":null,"articleAuthors":[{"articleId":"d4ef0cfe-0b7b-4432-a099-75a221c2258b"
我使用本文来配置我的多对多关系:https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration