EF 核心导航 属性 循环
EF Core Navigation Property Cycle
考虑以下因素
型号:
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;}
}
在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);
一切正常,问题是我获取了一个 Blog 它包含一个 Post 其中包含 Blog 其中包含 Posts 的列表,每个列表都包含 Blog
等等。
如何将其限制为特定的嵌套级别?
我检查了 docs,但找不到解决方案。
我认为你根本无法限制它。但我也不认为这会导致任何问题。
EntityFramework 通过用对数据库的实际查询替换(覆盖)它们的功能来处理 navigation properties
。这种方法称为 LazyLoading
.
这意味着,每次您访问 属性,它只是调用数据库并为您带来数据,而且它可以一直这样做,只要您提出请求。
我希望解释清楚?
可以找到进一步的解释 here。
此致
考虑以下因素
型号:
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;}
}
在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);
一切正常,问题是我获取了一个 Blog 它包含一个 Post 其中包含 Blog 其中包含 Posts 的列表,每个列表都包含 Blog 等等。
如何将其限制为特定的嵌套级别? 我检查了 docs,但找不到解决方案。
我认为你根本无法限制它。但我也不认为这会导致任何问题。
EntityFramework 通过用对数据库的实际查询替换(覆盖)它们的功能来处理 navigation properties
。这种方法称为 LazyLoading
.
这意味着,每次您访问 属性,它只是调用数据库并为您带来数据,而且它可以一直这样做,只要您提出请求。
我希望解释清楚?
可以找到进一步的解释 here。
此致