Sto usando EF 6 in MVC e ho una query come questa per ottenere tutti i miei articoli e quindi la categoria in cui è elencato l'articolo. Ciò restituisce risultati:
list = db.Articles.Where(a => a.PublishDate <= DateTime.Now)
.OrderByDescending(a => a.PublishDate)
.Skip(page * ArticleCount)
.Take(ArticleCount)
.Include(a => a.Category).ToList();
Ho anche una query filtrata per categoria o sottocategoria che ho come stored procedure. Sto usando SqlQuery
. Il modello di categoria non è caricato e Include
non funziona. Non riesco a trovare esempi online che riguardano EF 6 usando prima il codice. Come posso inserire i dati della categoria?
list = db.Database.SqlQuery<Article>(
"sp_GetArticlesByCategory @category, @subcategory",
new SqlParameter("@category", category),
new SqlParameter("@subcategory", subcategory))
.Skip(page * ArticleCount)
.Take(ArticleCount)
.ToList();
Quanto segue non è esattamente una risposta alla domanda: Come posso includere dati secondari usando SqlQuery in EF 6?
Ma in base alla spiegazione e alla domanda: perché hai bisogno di una procedura memorizzata? , Mostro il seguente:
se hai bisogno di un'entità tracciabile, questo può essere fatto usando il caricamento di più livelli .
from a in db.Articles.Include("Category.SubCategory")
where a.Category.SomeProperty == someValue
select a
In caso contrario, è possibile utilizzare un oggetto DAO e utilizzare una query linq
from a in db.Articles
where a.Category.SomeProperty == someValue
select new DaoArtType {
ArticleId = a.Id,
//...
Cat = new DaoCatType {
CatId = a.Category.Id
//...
}
}
Da qui possiamo immaginare un altro oggetto DAO
public class DAOArticleWithCat {
public int ArticleId {get; set;}
//...
public int ArticleCatId {get; set;}
//...
public int ArticleSubCatId {get; set;}
//...
}
tale oggetto DAO può essere popolato dal risultato di una stored procedure. Ma non riceverai le entità tracciate.