DbContext set<>包括不工作

时间:2014-05-18 08:00:21

标签: entity-framework include dbcontext

//Site entity
public class Site
{
    public long Id { get; set; }
    public string Title { get; set; }
    public virtual List<Language> Languages { get; set; }
}
//language entity
public class Language
{
    public long Id { get; set; }
    public string Title { get; set; }
    public string ShortName { get; set; }
    public virtual List<Site> Sites { get; set; }
}
//my context with custom connection and transaction
public class PortalBaseContext : DbContext
{
    public PortalBaseContext(DbConnection conn)
        : base(conn, false)
    {
        Database.UseTransaction((DbTransaction)PersistContext.Transaction);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Site>().ToTable("TblSite");
        modelBuilder.Entity<Language>().ToTable("TblLanguage");
        modelBuilder.Entity<Site>().
                                     HasMany(c => c.Languages).
                                     WithMany(p => p.Sites).
                                     Map(
                                      m =>
                                      {
                                          m.MapLeftKey("LanguageId");
                                          m.MapRightKey("SiteId");
                                          m.ToTable("TblSiteLanguage");
                                      });
    }

    public DbSet<Site> TblSite { get; set; }
    public DbSet<Language> TblLanguage { get; set; }
}


PortalBaseContext c = new PortalBaseContext( );
//Part1
DbSet<Site> query = c.Set<Site>();
query.Include("Languages");
lst = query.ToList();

//Part2
//lst = c.TblSite.Include("Languages").ToList();
第1部分中的

包括不工作!! 如果评论第1部分和使用第2部分包括正常工作!!

我根据请求使用自定义连接和事务,并希望加载 每个类的子属性。

第1部分中的

包括不工作!! 如果评论第1部分和使用第2部分包括正常工作!!

我根据请求使用自定义连接和事务,并希望加载 每个类的子属性。

1 个答案:

答案 0 :(得分:1)

Include是一种非破坏性方法。它返回一个新的枚举,其中每个项目在实现时都会加载指定的相关实体;您未以任何方式修改原来的DBSet来调用它。

您需要将ToList应用于Include返回的值。改变这个:

DbSet<Site> query = c.Set<Site>();
query.Include("Languages");
lst = query.ToList();

到此:

DbSet<Site> query = c.Set<Site>();
lst = query.Include("Languages").ToList();