//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部分包括正常工作!!
我根据请求使用自定义连接和事务,并希望加载 每个类的子属性。
答案 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();