Accélérer le temps de chargement d’Entity Framework 4 avec EFCachingProvider en ASP.NET
Comme vu précédemment dans l’article : Reduire le temps de chargement d’une page ASP.NET avec le SQL Cache Dependency, il est possible de réduire le temps de chargement d’une page en mettant en cache les résultats récupérés dans la base de données.
L’article précédent traité du SQL Cache Dependency avec Linq To SQL. Avec Entity Framework 4, cette méthode n’est pas disponible, il faut donc se rabattre sur un provider personnalisé créé par Jaroslaw Kowalski : EFCachingProvider.
continuer la lectureUtiliser des procédures stockées avec Entity Framework 4
Pour des raisons de sécurité et de performance, il peut être judicieux d’utiliser des procédures stockées pour interagir avec la base de données. Cet article a pour but de démontrer comment utiliser les procédures stockées avec le framework Entity 4.
Le but de l’article est de créer 4 procédures stockées pour ajouter, modifier et récupérer des blogs dans la base de données :
Insert(nvarchar(max) name, nvarchar(max) url)
Pour ajouter un blog dans la base de données. Elle retourne l’ID du blog qui vient dêtre ajouté.
continuer la lectureDocumenter son code .NET avec GhostDoc
Bien documenter son code est important afin d’aider d’une part d’autres développeurs à comprendre le code le plus rapidement possible mais aussi à soi-même afin d’être le plus efficace possible lors de la maintenance du code.
Visual Studio utilise le XML pour ses commentaires, pour par exemple ajouter une description à une méthode.
/// <summary>
/// Tests the specified param1.
/// </summary>
/// <param name="param1">The param1.</param>
/// <param name="param2">The param2.</param>
/// <param name="param3">The param3.</param>
/// <param name="param4">The param4.</param>
/// <returns>This method return 1</returns>
public int Test(int param1, int param2, int param3, int param4)
{
return 1;
}Si l’application fait plusieurs milliers de lignes, il est long et fastidieux de documenter chaque méthode, classe, etc… Souvent la quantité se fait au détriment de la qualité. Pour remédier à cet obstacle et toujours garder un code correctement documenté, il est possible d’utiliser un outil nommé GhostDoc. **GhostDoc **s’intègre à Visual Studio (de 2005 à 2010) et génère via un raccourci clavier (Ctrl-Shift-D par défaut) la documentation d’une méthode, classe, etc… Seule condition, respecter quelques standards de nommage dans votre code. Par exemple “myParam” pour un paramètre et “DefineTheParam” pour une méthode. En effet GhostDoc va découper les noms de paramètres, méthodes, etc… afin de construire des phrases dans la documentation.
continuer la lectureModifier un contrôle depuis un autre thread en WPF
Dans une application WPF, l’utilisation de plusieurs **threads **pour la modification de contrôles est plus compliquée qu’il n’y parait. Un contrôle ne peut être modifier que par le thread à qui il appartient.
Par exemple :
- MainWindow.xaml
<Window x:Class="Threads.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<Label Content="Label" Height="28" HorizontalAlignment="Left" Name="label1" />
</Grid>
</Window>- MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
namespace Threads
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Create Thread
Thread myThread = new Thread(ModifyLabel);
// Start Thread
myThread.Start();
// Wait for 3sec
Thread.Sleep(3000);
// Stop Thread
myThread.Abort();
}
public void ModifyLabel()
{
label1.Content = "my content";
}
}
}Lorsqu’on lance ce programme l’erreur suivante apparait :
continuer la lectureUpdatePanel en ASP.NET, attention au piège
En ASP.NET, l’UpdatePanel permet d’intéragir avec le serveur sans avoir à recharcher la page (mode asynchrone).
Le code suivant affiche la date courante dans le label lors du click sur le bouton sans avoir à recharger la page :
UpdatePanel.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:scriptmanager id="ScriptManager1" runat="server">
</asp:scriptmanager>
<asp:updatepanel id="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="bt1" runat="server" Text="Button"
onclick="bt1_Click" />
<asp:Label ID="lbl1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:updatepanel>
</div>
</form>
</body>
</html>UpdatePanel.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class UpdatePanel : System.Web.UI.Page
{
protected void bt1_Click(object sender, EventArgs e)
{
lbl1.Text = DateTime.Now.ToString();
}
}Ce qui donne le résultat suivant lors du click sur le bouton, le tout sans rechargement de page :
continuer la lectureRéduire le temps de chargement d’une page ASP.NET avec le SQL Server Cache Dependency
Un système de cache permet de mettre temporairement des données en mémoire sur le serveur permettant un affichage plus rapide des pages du site web.
En ASP.NET, il existe plusieurs solutions pour créer un système de cache :
- Output Caching : Une copie de la page web finale (HTML) est stockée sur le serveur. Lors du prochain appel à la page, la copie stockée sera automatiquement rendue au client n’exécutant ainsi pas les requêtes SQL, traitements côté serveur, etc… La copie expirera automatiquement après un temps préalablement configurée ou si le serveur manque de mémoire.
- Data Caching : Il est possible de stocker en mémoire sur le serveur des données comme un DataSet. Si le DataSet est mis en cache, on évite ainsi un appel à la base de données. Contrairement à l’Output Caching, c’est à vous de définir les objets qui seront mis en cache.
Dans cet article, c’est une partie du Data Caching qui nous intéresse : le SQL Server Cache Dependency. Le principe de cette méthode de caching est de limiter les appels à la base de données en mettant en cache le résultat d’une requête SQL et en l’utilisant tant que la table à qui elle fait appel n’est pas modifiée.
continuer la lectureRécupérer l’UserId de l’utilisateur connecté en C# avec ASP.NET
Avec l’utilisation du système intégré à ASP.NET pour gérer les utilisateurs, il peut être utile de récupérer l’identifiant de l’utilisateur actuellement connecté par exemple pour récupérer des données dans une base qui se rapporte à cet utilisateur.
Voici le code qui permet de récupérer l’UserId :
string userID = Membership.GetUser().ProviderUserKey.ToString();Envoyer un email grâce à un template en ASP.NET et C#
Dans un article précédent, j’expliquais comment envoyer un email en C#, un autre aspect intéressant de l’envoi de mail est de pouvoir utiliser un fichier texte comme template. Cette fonctionnalité est utilisée notamment par le contrôle _**CreateUserWizard avec le _MailDefinition : **
<MailDefinition BodyFileName="~/Skels/template.txt" Subject="Sujet du mail">
</MailDefinition>Le code ci-dessus permet donc d’utiliser le contenu du fichier _template.txt _comme corps de notre email.
Pour reproduire ce comportenant en C#, il faut utiliser la classe **MailDefinition **comme exposé dans l’exemple suivant.
continuer la lectureObjectDataSource et Guid, propriété non trouvée en ASP.NET
Lorsque l’on veut utiliser un GridView pour ajouter/modifier/supprimer des données dans une table SQL qui a pour clé primaire un **Guid **(par exemple aspnet_Users), une erreur survient lorsque l’on veut modifier ou supprimer un élément :
Could not find a property named 'xxx' on the type specified by the DataObjectTypeName property in ObjectDataSource 'yyy'
Tout semble pourtant bien configurer, mais l’erreur persiste. J’ai été confronté à ce problème avec la table aspnet_Users, qui contient les utilisateurs créés avec le système interne d’ASP.NET.
continuer la lectureRéparer le namespace des fichiers .dbml utilisés pour Linq To SQL en .NET
En utilisant Linq To SQL, il arrive après une modification du fichier .dbml de ne plus avoir accès aux données en affichant une erreur du type :
The type or namespace name 'Article' could not be found (are you missing a using directive or an assembly reference?)
Pour résoudre ce problème, vérifier premièrement dans le fichier .designer.cs de votre fichier .dbml que le namespace est correct (VotreProjet.LeDossier par défaut).
Si le problème persiste, vérifier dans les propriétés du fichier .dbml que Entity Namespace et Context Namespace aient bien la valeur du namespace précisée dans le fichier .designer.cs.