对象模型和关系数据库中的关系表示形式,包括 EF Core 在两者之间的映射方式
public class Post
{//文章
public string Title { get; set; }
public string Content { get; set; }
public DateOnly PublishedOn { get; set; }
public bool Archived { get; set; }
public Blog Blog { get; set; }//属于那个博客
public int BlogId { get; set; }
}
public class Blog
{//博客
public string Name { get; set; }
public virtual Uri SiteUri { get; set; }
public ICollection<Post> Posts { get; }//包含多遍文章
}
注意:单一关系通常可以按任一方向遍历。 在此示例中,即通过 Blog.Posts 属性从 Blog 到 Post,以及通过 Post.Blog 属性从 Post 返回到 Blog。 这是一个关系,不是两个。
提示:在 EF Core 中,Blog.Posts 和 Post.Blog 属性称为“导航”。
关系数据库使用外键表示关系:
CREATE TABLE [Posts] (
[Id] int NOT NULL IDENTITY,
[Title] nvarchar(max) NULL,
[Content] nvarchar(max) NULL,
[PublishedOn] datetime2 NOT NULL,
[Archived] bit NOT NULL,
[BlogId] int NOT NULL,
CONSTRAINT [PK_Posts] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Posts_Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blogs] ([Id]) ON DELETE CASCADE);
CREATE TABLE [Blogs] (
[Id] int NOT NULL IDENTITY,
[Name] nvarchar(max) NULL,
[SiteUri] nvarchar(max) NULL,
CONSTRAINT [PK_Blogs] PRIMARY KEY ([Id]));
在生成类似这样的简单关系时,EF 会自动执行此操作,但在重写你的 DbContext 的 OnModelCreating 方法时也可以显式指定。 例如:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasMany(e => e.Posts)
.WithOne(e => e.Blog)
.HasForeignKey(e => e.BlogId)
.HasPrincipalKey(e => e.Id);
}
浙公网安备 33010602011771号