复习:数据库表之间的关系:一对一、一对多、多对多
EF Core不仅支持单实体操作,更支持多实体的关系操作。
一、一对多: 关系配置
class Comment
{
public long Id { get; set; }
public string Message { get; set; }
public Article TheArticle { get; set; }
public long TheArticleId { get; set; }
}
class CommentConfig : IEntityTypeConfiguration<Comment>
{
public void Configure(EntityTypeBuilder<Comment> builder)
{
builder.ToTable("T_Comments");
builder.Property(a => a.Message).IsUnicode().IsRequired();
builder.HasOne<Article>(c => c.TheArticle).WithMany(a => a.comments).HasForeignKey(c=>c.TheArticleId).IsRequired(); //TheArticle是属性
}
}
把关系配置到Comment这个实体上
一个Comment有一个Article实体
Comment中的TheArticle属性对应一个Article实体
Article实体中的Comments对应多个Comment
查看外键关系 、、、、EFcore自动外键行为
在一对多的关系中 在多的 建立指向一的外键关系

EF Core中实体之间关系的配置的套路:HasXXX(...).WithXXX(...);一对多: HasOne(...).WithMany(...);
一对一: HasOne(...).WithOne (...);
多对多: HasMany (...).WithMany(...);
Artcle.cs
class Article
{
public long Id { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public List<Comment> comments { get; set; } = new List<Comment>(); //建议给个空的List
}
ArtcleConfig.cs
class ArticleConfig : IEntityTypeConfiguration<Article>
{
public void Configure(EntityTypeBuilder<Article> builder)
{
builder.ToTable("T_Articles");
builder.Property(a => a.Title).HasMaxLength(100).IsUnicode().IsRequired();
builder.Property(a => a.Message).IsUnicode().IsRequired();
}
}
配置到Article这一个实体上
然后创建数据库
往这两个表中加入一些数据

一对多过程:
1.先声明一的对象,并且在一的类中把多的list建好

2.在多的类中声明好父亲

3.在多的类配置文件中配置好// 我有一个文章 文章有多个评论

插入数据:

创建一个对象
创建它的子对象
把子对象加入到父对象中去
把父对象加入到Dbcontext中去
SaveChanges保存