C# 代码优先实体框架延迟加载不起作用
我在工作中遇到了麻烦 如果我这样做:C# 代码优先实体框架延迟加载不起作用,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我在工作中遇到了麻烦 如果我这样做: static void Main(string[] args) { using(var db = new BlogContext()) { //db.Blogs.Load(); //db.Posts.Load(); foreach (var v in db.Blogs) { Console.WriteLine("Blog: "+ v.Name+" P
static void Main(string[] args)
{
using(var db = new BlogContext())
{
//db.Blogs.Load();
//db.Posts.Load();
foreach (var v in db.Blogs)
{
Console.WriteLine("Blog: "+ v.Name+" Post count:"+v.Posts.Count());
}
}
}
“后计数”始终为0
但是如果在foreach之前取消对Load()调用的注释,则Post计数是正确的。你知道怎么了吗
下面是正在使用的实体类:
public class Blog
{
public Blog(){
Posts = new List<Post>();
}
[Key]
public int BlogId { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
[Key]
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
[ForeignKey("BlogId")]
public virtual Blog Blog { get; set; }
}
public class BlogContext : DbContext
{
public BlogContext()
{
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
}
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
公共类博客
{
公共博客(){
Posts=新列表();
}
[关键]
public int BlogId{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection Posts{get;set;}
}
公营职位
{
[关键]
公共int PostId{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
public int BlogId{get;set;}
[ForeignKey(“博客ID”)]
公共虚拟博客{get;set;}
}
公共类BlogContext:DbContext
{
公共博客上下文()
{
Configuration.LazyLoadingEnabled=true;
Configuration.ProxyCreationEnabled=true;
}
公共数据库集博客{get;set;}
公共DbSet Posts{get;set;}
}
发现问题出在使用本地MS SQL数据库。使用SQLite没有问题。发现问题是使用本地MS SQL数据库。使用SQLite没有问题。您进行了关系映射?延迟加载应该适用于您的示例,但在这种情况下会导致选择N+1。。我使用的是代码优先的方法,所以上面的实体和上下文类定义了DB和关系。只是为了检查一下,如果使用DB.Blogs.Include(b=>b.Posts)
?如果我添加DB.Blogs.Include(b=>b.Posts);在foreach之前…同样的事情:-(您进行了关系映射?延迟加载应该适用于您的示例,但在这种情况下会导致选择N+1。.最好保持热情我正在使用代码优先的方法,以便上面的实体和上下文类定义DB和关系。仅供检查,如果您使用DB.Blogs.Include(b=>b.Posts),会发生什么情况
?如果我添加db.Blogs.Include(b=>b.Posts);在foreach之前…同样的事情:-(