【发布时间】:2018-10-10 19:00:36
【问题描述】:
考虑以下
型号:
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 列表,其中包含 帖子,每个帖子都包含博客 等等。
如何将其限制为特定级别的嵌套? 我查了docs,没找到解决办法。
【问题讨论】:
-
为什么这是个问题? EF 的作用是进行 LazyLoading,因此当您单击或获取下一个属性时,它会前往数据库并为您获取。
-
目前还没有延迟加载。但是导航属性只是链接在一起。所以
blog,Posts[0].Blog == blog。这不是嵌套,属性指向同一个对象。
标签: c# .net-core entity-framework-core ef-core-2.0