Optimieren Sie die Entity Framework-Abfrage

Ich versuche, in meiner Freizeit einen Stackoverflow-Klon zu erstellen, um EF6 und MVC5 zu erlernen. Zur Zeit verwende ich OWin zur Authentifizierung.

Alles funktioniert gut, wenn ich 50-60 Fragen habe, die ich benutzt habeRed Gate Datengenerator und versuchen Sie, es mit ein paar Tausend untergeordneten Tabellenzeilen ohne Beziehung auf 1 Million Fragen hochzufahren, nur um den ORM ein wenig zu "betonen". So sieht der Linq aus

var query = ctx.Questions
               .AsNoTracking()     //read-only performance boost.. http://visualstudiomagazine.com/articles/2010/06/24/five-tips-linq-to-sql.aspx
               .Include("Attachments")                                
               .Include("Location")
               .Include("CreatedBy") //IdentityUser
               .Include("Tags")
               .Include("Upvotes")
               .Include("Upvotes.CreatedBy")
               .Include("Downvotes")
               .Include("Downvotes.CreatedBy")
               .AsQueryable();

if (string.IsNullOrEmpty(sort)) //default
{
    query = query.OrderByDescending(x => x.CreatedDate);
}
else
{
    sort = sort.ToLower();
    if (sort == "latest")
    {
        query = query.OrderByDescending(x => x.CreatedDate);
    }
    else if (sort == "popular")
    {
        //most viewed
        query = query.OrderByDescending(x => x.ViewCount);
    }
}

var complaints = query.Skip(skipCount)
                      .Take(pageSize)
                      .ToList(); //makes an evaluation..

Unnötig zu sagen, dass ich SQL-Timeouts bekomme und nach der InstallationMiniprofilerund sehen Sie sich die generierte SQL-Anweisung an, die einige hundert Zeilen lang ist.

Ich weiß, dass ich zu viele Tabellen betrete / betrete, aber wie viele Projekte im wirklichen Leben müssen wir nur 1 oder 2 Tabellen betreten? Es kann Situationen geben, in denen wir so viele Joins mit mehreren Millionen Zeilen ausführen müssen. Ist die Verwendung von gespeicherten Prozeduren der einzige Weg?

Wenn dies der Fall ist, wäre EF selbst nur für kleine Projekte geeignet?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage