2014-05-18 51 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();