2012-02-12 7 views
1

Je construis un modèle comme ci-dessous. La relation entre Recycler et Account est de 1: 1.Pourquoi je ne peux pas faire ToList()?

public class MyContext : DbContext 
{ 
    public DbSet<Quoter> Quoters { get; set; } 
    public DbSet<Account> Accounts { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Account>() 
      .HasRequired(a => a.RecyclerRef) 
      .WithRequiredDependent(r => r.AccountRef); 
    } 
} 

public class Quoter 
{ 
    public int QuoterId { get; set; } 
    public string Text { get; set; } 

} 

public class Recycler : Quoter 
{ 
    public string Description { get; set; } 
    public virtual Account AccountRef { get; set; } 
} 

public class Account 
{ 
    public int AccountId { get; set; } 
    public Recycler RecyclerRef { get; set; } 
} 

Mais, je reçois des exceptions quand je fais l'une ou l'autre de ces requêtes:

var query1 = context.Quoters 
    .OfType<Recycler>() 
    .Include(r => r.AccountRef) 
    .Where(r => r.QuoterId == 1) 
    .ToList(); 

var query2 = context.Set<Recycler>() 
    .Include(r => r.AccountRef) 
    .Where(r => r.QuoterId == 1) 
    .ToList(); 

Exception montre que ResultType is “Transient.reference[POCOFirst.Quoter]”,but recommanded is “Transient.reference[POCOFirst.Recycler]”

Si je retire le ToList(), il fonctionne bien. Mais j'ai besoin d'une liste comme valeur de retour de la méthode. Pourquoi ne puis-je pas faire ToList()? Merci

+0

Si vous oubliez le 'ToList()' et passez la souris sur le mot-clé 'var', qu'est-ce que l'info-bulle indique? – ChrisF

+0

Il montre le type de requête est IQueryable . – Abbey

Répondre

0

Il semble que vous avez trébuché sur this bug dans EF. Une autre référence à the bug. La solution serait de supprimer la méthode Include.

Questions connexes