在实际项目开发中,对于主从结构的一对多表关系,可以声明双向导航属性。
关系即可以配置在主表中也可以配置在从表中
例如:文章和文章评论是一对多的关系,一篇文章可能有多个评论
文章表
public class Article
{
public long Id { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public string CreatedOn{ get; set; }
/// <summary>
/// 文章的多条评论
/// </summary>
public List<Comment> Comments { get; set; } = new List<Comment>();
}
文章评论表
public class Comment
{
public long Id { get; set; }
/// <summary>
/// 文章
/// </summary>
public Article Article { get; set; }
/// <summary>
/// 文章Id
/// </summary>
public long ArticleId { get; set; }
/// <summary>
/// 评论内容
/// </summary>
public string Message { get; set; }
/// <summary>
/// 评论时间
/// </summary>
public string CreatedOn{ get; set; }
}
文章实体类和数据库表的关系配置
public class ArticleMap: IEntityTypeConfiguration<Article>
{
public void Configure(EntityTypeBuilder<Article> builder)
{
// 配置实体属性、关系等
builder.ToTable("Article");
builder.HasKey(t => t.Id);
builder.Property(t => t.Content).IsRequired();
builder.Property(t => t.Address).IsRequired().HasMaxLength(255);
}
}
评论实体类和数据表对应关系配置
public class CommentMap: IEntityTypeConfiguration<Comment>
{
public void Configure(EntityTypeBuilder<Comment> builder)
{
builder.ToTable("Comment");
builder.HasOne<Article>(c => c.Article).WithMany(a => a.Comments).IsRequired().HasForeignKey(t=>t.ArticleId);
builder.Property(c => c.Message).IsRequired();
}
}