Ich bin neu in Datenbanken und EF. Ich verwende EF in einem ASP.NET Core MVC-Projekt. Der folgende Implementierungscode stammt von einem Controller, mit dem Ziel, Daten aus zwei Tabellen zu einer Zusammenfassung zusammenzufassen.DB erste Entity Framework Abfrage unglaublich langsam
Die Datenbank hat Tabellen: Batch, Doc.
Batch enthält viele Spalten, einschließlich: int BatchId, String BatchEnd. BatchEnd ist eine konsistent formatierte DateTime, z. 23/09/2016 14:33:21
Doc hat viele Spalten einschließlich: String BatchId, String HardCopyDestination. Viele Dokumente können auf dieselbe BatchId verweisen, aber alle Dokumente, die dies tun, haben denselben Wert für HardCopyDestination.
Ich möchte folgende Ansichtsmodell
public class Batch
{
public int BatchId { get; set; }
public string Time { get; set; } // from BatchEnd
public string HardCopyDestination { get; set; }
}
Aber meine aktuelle Abfrage zu füllen, unten, ist Hund läuft langsam. Habe ich das richtig umgesetzt?
var BatchViewModels = new List<Batch>();
// this is fine
var batches = _context.BatchTable.Where(
b => b.BatchEnd.Contains(
DateTime.Now.Date.ToString("dd/MM/yyyy")));
// this bit disappears down a hole
foreach (var batch in batches)
{
var doc = _context.DocTable.FirstOrDefault(
d => d.BatchId == batch.BatchId.ToString());
if (doc != null)
{
var newBatchVM = new Batch
{
BatchId = batch.BatchId,
Time = batch.BatchEnd.Substring(whatever to get time),
HardCopyDestination = doc.HardCopyDestination
};
BatchViewModels.Add(newBatchVM);
continue;
}
}
return View(BatchViewModels);
Warum verwenden Sie Zeichenfolgen zur Darstellung von DateTime-Instanzen? Sie sollten 'System.DateTime' in .net (C#) und' DateTime2 (7) 'oder' DateTime' in Sql Server verwenden (* Sie haben Ihren Datenbankserver nie erwähnt, wenn er nicht sql verwendet, dann den Servertyp zur Darstellung verwendet Datum mal, aber es wird keine Zeichenfolge sein) *. Auch die Formatierung eines Datums (TT/MM/JJJJ oder MM/TT/JJJJ oder was auch immer) ist eine Lösung für die Darstellungsschicht und sollte niemals auf die Persistenzschicht übertragen werden. – Igor
Sie machen einige komische Sachen mit Ihren Daten – KSib
@Igor die Datenbank ist außerhalb meines Einflussbereichs entworfen und bevölkert. Ich kann jedoch mein eigenes ViewModel beeinflussen, also ja, weniger fummelig, es einfach vollständig zu parsen und dann nur das Zeitelement anzuzeigen. –