2014-05-18 52 views
-1
//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(); 

in part1 include not work !! 如果评论part1和使用part2包括正常工作!DbContext设置<>包括不工作

我使用每个请求的自定义连接和事务,并且想要为每个类加载 子属性。

in part1 include not work !! 如果评论part1和使用part2包括正常工作!

我使用每个请求的自定义连接和事务,并且想要为每个类加载 子属性。

+1

究竟你 “不行” 是什么意思?您看到有特定的例外或意外行为吗? –

回答

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();