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之前…同样的事情:-(