对象模型和关系数据库中的关系表示形式,包括 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); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源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 面试题