Я пытаюсь сделать клонирование stackoverflow в свое время, чтобы изучить EF6 и MVC5, в настоящее время я использую OWin для аутентификации.
Все работает нормально, когда у меня есть 50-60 вопросов, я использовал генератор данных Red Gate и попытался развернуть его до 1 миллиона вопросов с помощью несколько тысяч строк дочерних таблиц без отношения просто "стресс" ORM. Вот как выглядит linq
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..
Излишне говорить, что я получаю таймауты SQL и после установки Miniprofiler, и посмотрите на выраженный sql-оператор, это чудовищные немногие сто строк.
Я знаю, что я присоединяюсь/включая слишком много таблиц, но сколько проектов в реальной жизни, нам нужно только присоединиться к 1 или 2 таблицам? Могут быть ситуации, когда мы должны делать это много соединений с многомиллионными рядами, идет хранимые процедуры единственным способом?
Если бы этот случай, EF сам был бы только подходящим для небольших проектов?