学海无涯

导航

统计

对象模型和关系数据库中的关系表示形式,包括 EF Core 在两者之间的映射方式

1
2
3
4
5
6
7
8
9
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; }
}

  

1
2
3
4
5
6
7
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 属性称为“导航”。

关系数据库使用外键表示关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 方法时也可以显式指定。 例如:

1
2
3
4
5
6
7
8
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);
}

  

 

posted on   宁静致远.  阅读(13)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-09-20 Docker资源
2022-09-20 Docker 基本概念
2022-09-20 Docker简介(图示)
2022-09-20 23种常用的设计模式
2022-09-20 SQL Server事务的四种隔离级别
2022-09-20 .NetCore 面试题
点击右上角即可分享
微信分享提示