2016-04-07 6 views
1

Ich habe Paging und i whant Zählung in derselben Abfrage mit einfachen SQL zu wählen (EF7):EF-Kern-Paging. Wählen Gesamtzählung in derselben Abfrage

var selectSql = " SELECT TotalCount = COUNT(*) OVER(), E.* FROM [table] E ..."; 
var rows = context.Set<EventTable>().FromSql<EventTable>(selectSql, parameters.Select(p => p.Value).ToArray()).ToArray(); 

Wählen Sie diese Einstellung funktioniert, aber ich habe keine Totalcount Eigenschaft in meinem EventTable Klasse, weil ich diese Eigenschaft in der Datenbank nicht whont.

Ich versuche Totalcount Eigenschaft von Entity-Tracker erhalten:

var row = rows.First(); 
var entity = context.Entry(row); 
var totalCount = entity.Property<int>("TotalCount").CurrentValue; 

Aber dann Fehler, den ich bekommen: Die Eigenschaft ‚Totalcount‘ auf Entitätstyp EventTable 'konnte nicht gefunden werden. Stellen Sie sicher, dass die Eigenschaft existiert und in das Modell aufgenommen wurde.

Dann versuche ich Immobilien in Modell wie folgt hinzuzufügen:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<EventTable>(b => b.Property<int>("TotalCount")); 
} 

Es funktioniert gut, wenn ich wählen whant, aber es löst eine Ausnahme auf dem Einsatz, weil Spalte in der Datenbank nicht vorhanden. Und EF wird diese Spalte bei der Migration hinzufügen. Aber ich stelle fest, dass ich vor der Migrationserzeugung Zeile b.Property ("TotalCount") hinzufüge; In der ModelSnapshot-Klasse wird vermieden, Eigenschaften bei der Migration hinzuzufügen. Aber Problem beim Einfügen existiert noch.

Ich versuche, eine andere Klasse zu erstellen:

[NotMapped] 
public class EventSearchTable : EventTable 
{ 
    [Column("total_count")] 
    [Required] 
    public int TotalCount { get; set; } 
} 

und dann dies tun:

var rows = context.Set<EventSearchTable>().FromSql<EventSearchTable>(..); 

Es funktioniert auf EF6, aber nicht auf EF7, ich habe Fehler: Wert darf nicht null sein. Parametername: entityType Da keine Entität in meinem DbContext. Wenn ich die EventSearchTable-Klasse zu meinem DbContext hinzufügen werde, dann erwartet es Spalten wie Diskriminator und usw. und erstellt Tabellen in Migrationen.

Irgendwelche Ideen, wie man Eigentum erhält TotalCount?

Sorry, wenn mein Englisch kaputt ist.

Antwort

3

Die folgende Abfrage wird die Zählung und Seite Ergebnisse in einer Reise in die Datenbank

var query = context.Set<EventTable>(); 
var page = query.OrderBy(e => e.Id) 
       .Select(e => e) 
       .Skip(100).Take(100) 
       .GroupBy(e => new { Total = query.Count() }) 
       .FirstOrDefault(); 

if (page != null) 
{ 
     int total = page.Key.Total; 
     List<EventTable> events = page.Select(e => e).ToList(); 
} 
+2

Dies wird nicht erhalten, wenn die Ergebnismenge obwohl leer ist (zumindest in EF-Kern). Die Seite ist nicht null, hat aber eine interne NullReferenceException. –

+1

Es schlägt fehl, wenn die Ergebnismenge leer ist. Irgendeine Lösung dafür? –

Verwandte Themen