Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首先在实体框架代码中定义外键_C#_Entity Framework_Asp.net Core_Foreign Key Relationship_Entity Framework Core - Fatal编程技术网

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;}
,此查询将无法工作。没错,你不会写的。