C# 首先在实体框架代码中定义外键
在下面的模型示例(取自此)中,我了解到他们正在定义C# 首先在实体框架代码中定义外键,c#,entity-framework,asp.net-core,foreign-key-relationship,entity-framework-core,C#,Entity Framework,Asp.net Core,Foreign Key Relationship,Entity Framework Core,在下面的模型示例(取自此)中,我了解到他们正在定义博客(父)和帖子(子)表之间的外键关系。但是在下面的Blog类中,publicslist Posts{get;set;}属性有什么用途呢?如果我删除此属性并从此模型中生成SQL Server数据库,我仍然可以看到数据库是使用Posts表中的BlogId作为Blog表的外键成功创建的 namespace EFGetStarted.AspNetCore.NewDb.Models { public class BloggingContext :
博客
(父)和帖子
(子)表之间的外键关系。但是在下面的Blog类中,publicslist Posts{get;set;}
属性有什么用途呢?如果我删除此属性并从此模型中生成SQL Server数据库,我仍然可以看到数据库是使用Posts
表中的BlogId
作为Blog
表的外键成功创建的
namespace EFGetStarted.AspNetCore.NewDb.Models
{
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{ }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
名称空间EFGetStarted.AspNetCore.NewDb.Models
{
公共类BloggingContext:DbContext
{
公共博客上下文(DbContextOptions)
:基本(选项)
{ }
公共数据库集博客{get;set;}
公共DbSet Posts{get;set;}
}
公共类博客
{
public int BlogId{get;set;}
公共字符串Url{get;set;}
公共列表发布{get;set;}
}
公营职位
{
公共int PostId{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
public int BlogId{get;set;}
公共博客Blog{get;set;}
}
}
Nam
如果需要直接从Blog
对象的实例访问帖子,则Blog
类中的Posts
属性可能很有用
可以使用Include方法通过延迟加载或实体框架急切加载来加载帖子:
var blogs1 = context.Blogs
.Include(b => b.Posts)
.ToList();
如果您删除它,将不会阻止数据库的正确创建。
列出文章
是一种方便从博客访问文章的方法。@Jasen您的链接已断开,应该是我在该URL的末尾额外复制了一封信。实际上,EfCore还不支持延迟加载,您必须使用Include。为了澄清FK是基于BlogId创建的,Posts属性只是一个导航属性。@Viviencehevallier所以你的查询是说给我哪个blog的所有帖子
?或者,您的查询是“给我每个博客以及与每个博客相关的所有帖子”。换句话说,这是在blog和Posts表之间编写LINQ连接的另一种方法。在将其标记为答案之前,我试图理解您的回答。
@nam我的查询是:给我每个博客以及与每个博客相关的所有帖子。@vivenchevallier如果没有blog类中使用的属性public List posts{get;set;}
,此查询将无法工作。没错,你不会写的。