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.
@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