0

erstelle ich ASP.NET Core-1-Anwendung mit EF-Core 1. Ich habe zwei Klasse, die eine Eins-zu-viele-Beziehung hat alsBenutzerdefinierte Funktion für Include-Methode in EF

public class Country: EntityBase 
{ 
    public string Name { get; set; } 

    // fields for relations 

    public IQueryable<Singer> Singers { get; set; } 
} 

public class Singer : EntityBase 
{ 
    public string Name { get; set; } 

    // fields for relation 

    public int CountryId { get; set; } 
    public virtual Country Country { get; set; } 
} 

folgen und ihre Zuordnung

public class SingerMap 
{ 
    public SingerMap(EntityTypeBuilder<Singer> entityBuilder) 
    { 
     entityBuilder.HasKey(x => x.Id); 
     entityBuilder.Property(x => x.Id).ValueGeneratedOnAdd(); 

     entityBuilder.Property(x => x.Name).HasMaxLength(500); 

     //relational fields 
     entityBuilder.HasOne(x => x.Country).WithMany(x => x.Singers).HasForeignKey(x => x.CountryId); 
    } 
} 

public class CountryMap 
{ 
    public CountryMap(EntityTypeBuilder<Country> entityBuilder) 
    { 
     entityBuilder.HasKey(x => x.Id); 
     entityBuilder.Property(x => x.Id).ValueGeneratedOnAdd(); 
     entityBuilder.Property(x => x.Name).HasMaxLength(500); 
    } 
} 

Ich erstelle generische Repository-Muster für diese Entitäten. Es gibt eine Funktion für zählen Eigenschaft als

public virtual IEnumerable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties) 
    { 
     IQueryable<T> query = _context.Set<T>(); 
     foreach (var includeProperty in includeProperties) 
     { 
      query = query.Include(includeProperty); 
     } 
     return query.AsEnumerable(); 
    } 

folgen Und ich nenne diese Methode

[HttpGet] 
    public JsonResult GetAllForIndex() 
    { 
     var result = Service.AllIncluding(x => x.Country); 
     return Json(result); 
    } 

Und danach bekomme ich diese Fehler

Die Art der Navigationseigenschaft ‚Singers‘ auf Der Entitätstyp 'Land' ist 'IQueryable', für den es nicht möglich war, eine konkrete Instanz zu erstellen. Initialisieren Sie die Eigenschaft vor der Verwendung, fügen Sie dem Typ einen öffentlichen parameterlosen Konstruktor hinzu oder verwenden Sie einen Typ, der ein HashSet <> oder List <> zugewiesen werden kann.

Ich habe keine Idee für eine Lösung. Bitte helfen.

Antwort

2
public IQueryable<Singer> Singers { get; set; } 

Sollte

public List<Singer> Singers { get; set; } 

Die Ausnahmemeldung ziemlich Staaten genau das, was falsch ist und was es geändert werden sollte. Sie können fast jeden Typ verwenden, der entweder von HashSet<> oder List<> stammt.

+0

@ElvinMammadov - kein Problem. Bitte denken Sie darüber nach, eine Antwort zu akzeptieren (siehe [So akzeptieren Sie SO-Antworten] (http://meta.stackexchange.com/a/5235)), wenn Sie einen Moment haben. – Igor

Verwandte Themen