C# EF核心导航属性周期

C# EF核心导航属性周期,c#,.net-core,entity-framework-core,ef-core-2.0,C#,.net Core,Entity Framework Core,Ef Core 2.0,考虑以下几点 型号: public class Blog { public Guid ID {get; set;} public string Name {get; set;} // more fields... // Navigation Property public IList<Post> Posts {get; set;} } public class Posts { public Guid ID {get; set;}

考虑以下几点

型号:

public class Blog
{
    public Guid ID {get; set;}
    public string Name {get; set;}
    // more fields...

    // Navigation Property
    public IList<Post> Posts {get; set;}
}

public class Posts
{
    public Guid ID {get; set;}
    public Guid BlogID {get; set;}
    public string Author {get; set;}
    // more fields...

    // Navigation Property
    public Blog Blog {get; set;}
}
公共类博客
{
公共Guid ID{get;set;}
公共字符串名称{get;set;}
//更多领域。。。
//导航属性
公共IList Posts{get;set;}
}
公营职位
{
公共Guid ID{get;set;}
公共Guid BlogID{get;set;}
公共字符串作者{get;set;}
//更多领域。。。
//导航属性
公共博客Blog{get;set;}
}
DbContext.OnModelCreating中:

// Primary Keys
modelBuilder.Entity<Blog>()
            .HasKey(c => c.ID);

modelBuilder.Entity<Post>()
            .HasKey(c => c.ID);

modelBuilder.Entity<Blog>()
            .HasMany(c => c.Posts)
            .WithOne(c => c.Blog)
            .HasForeignKey(c => c.BlogID)
            .HasPrincipalKey(c => c.ID);

modelBuilder.Entity<Post>()
            .WithOne(c => c.Blog)
            .HasMany(c => c.Posts)     
            .HasForeignKey(c => c.BlogID)
            .HasPrincipalKey(c => c.ID);
//主键
modelBuilder.Entity()
.HasKey(c=>c.ID);
modelBuilder.Entity()
.HasKey(c=>c.ID);
modelBuilder.Entity()
.HasMany(c=>c.Posts)
.WithOne(c=>c.Blog)
.HasForeignKey(c=>c.BlogID)
.HasPrincipalKey(c=>c.ID);
modelBuilder.Entity()
.WithOne(c=>c.Blog)
.HasMany(c=>c.Posts)
.HasForeignKey(c=>c.BlogID)
.HasPrincipalKey(c=>c.ID);
这一切都是可行的,问题是我获取一个博客它包含一个帖子,其中包含博客,其中包含一个帖子列表,每个帖子都包含博客 等等

如何将其限制在特定的嵌套级别?
我检查了问题,找不到解决方案。

我认为你根本无法限制这一点。但我也不认为这会引起任何问题

EntityFramework通过使用对数据库的实际查询替换(覆盖)导航属性的功能来处理导航属性。这种方法称为
LazyLoading

这意味着,每次您访问该属性时,它只需调用数据库并为您带来数据,并且它可以根据您的请求永远这样做

我希望这能解释为什么

可以找到进一步的解释


关于

为什么这是一个问题?EF所做的是懒散加载,所以当你点击或获取下一个属性时,它会移动到数据库并为你获取它。现在还没有懒散加载。但是导航属性只是链接在一起。所以
blog,帖子[0]。blog==blog
。这不是嵌套,属性指向同一个对象。有没有一种方法可以在不使用导航属性的情况下使用fluent api创建关系?首先,为什么您认为这是一个问题?如果没有导航属性,我认为你无法进行重播。你可以把它改为热切加载而不是懒散加载,然后它会有你包含的数据,没有更多。是的,这不是一个选择,我同意。你用什么做映射?我很确定你可以在Automapper中设置。我已经记不得了,这是错误的答案。没有延迟加载。导航属性没有被设置为虚拟。无论您以何种方式填充导航,EF都会进行修复,以便导航的两侧都指向对方。这是您需要处理的典型序列化问题。