Pour afficher une page, j'ai besoin d'obtenir beaucoup d'informations de diverses tables, et pour l'instant, cela prend environ 20 secondes pour charger la page, ce qui est terrible.Comprendre le résultat de plusieurs tables sous Entity Framework
Donc, je veux tout déplacer dans une procédure de magasin et obtenir toutes ces informations l'ancienne manière DataTable.
Je reçois ce
public WinnerPageInformation FindWinnerPageInformation(int calendarId)
{
BackendPagesContext ctx = new BackendPagesContext(db.Connection);
IMultipleResults results = ctx.WinnersBackendPageInformation(calendarId);
return new WinnerPageInformation()
{
Challenges = results.GetResult<Challenges>(),
Content = results.GetResult<ContentWinners>().FirstOrDefault(),
Einfo = results.GetResult<ContentEmails>().FirstOrDefault(),
Fields = results.GetResult<SubscriberFields>(),
Prizes = results.GetResult<Prizes>(),
Winners = results.GetResult<Winners>()
};
}
et WinnersBackendPageInformation ressemble à ceci
public class BackendPagesContext : DataContext
{
public BackendPagesContext(System.Data.IDbConnection connection)
: base(connection) { }
[Function(Name = "dbo.sp_GetWinnersBackendPageInformation")]
[ResultType(typeof(JK_ContentWinners))]
[ResultType(typeof(JK_Winners))]
[ResultType(typeof(JK_SubscriberFields))]
[ResultType(typeof(JK_Prizes))]
[ResultType(typeof(JK_Challenges))]
[ResultType(typeof(JK_ContentEmails))]
public IMultipleResults WinnersBackendPageInformation(
[Parameter(Name = "calendarId", DbType = "Int")] int calendarId)
{
IExecuteResult result =
this.ExecuteMethodCall(this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
calendarId);
return (IMultipleResults)(result.ReturnValue);
}
}
public interface IMultipleResults : IFunctionResult, IDisposable
{
IEnumerable<TElement> GetResult<TElement>();
}
mais le problème que je suis face est que, la ligne this.ExecuteMethodCall
renvoie une erreur indiquant que le résultat est pas un multipletable résultat.
ma procédure de magasin ressemble
ALTER PROCEDURE sp_GetWinnersBackendPageInformation
@calendarId numeric = 0
AS
BEGIN
SELECT * FROM ContentWinners WHERE calendar_id = @calendarId;
SELECT * FROM Winners WHERE calendar_id = @calendarId;
SELECT * FROM SubscriberFields WHERE calendar_id = @calendarId ORDER BY position;
SELECT * FROM Prizes WHERE calendar_id = @calendarId ORDER BY prizetype_id, to_day, title;
SELECT * FROM Challenges WHERE calendar_id = @calendarId;
SELECT * FROM ContentEmails WHERE calendar_id = @calendarId;
END
GO
message d'erreur est
Plus d'un type de résultat déclaré pour la fonction 'WinnersBackendPageInformation' qui ne revient pas IMultipleResults.
Qu'est-ce qui me manque?
merci de le signaler ... jamais arrivé à ce commentaire :( – balexandre