IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[LINQ] Object reference not set to an instance of an object.


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut [LINQ] Object reference not set to an instance of an object.
    Hello,
    J'utilise LINQ pour la premiere fois (je teste un peut ASP.NET), et j'ai un probleme, j'ai 3 tables (Articles, aspnet_Users, Categories) que j'utilise en jointure comme ceci dans une vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public ActionResult Index()
            {
                var dataContext = new BlogDataContext();
                var allArticles = from articles in dataContext.Articles
                                  join categories in dataContext.Categories
                                    on articles.CategoryUuid equals categories.Uuid
                                  join authors in dataContext.Authors
                                    on articles.AuthorUuid equals authors.UserId
                                  select articles;
                return View(allArticles);
            }
    Seulement quand je veux l'utiliser dans la vue comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            <% foreach (Article article in (IEnumerable)ViewData.Model) { %>
                <div class="article">
                    <div class="title">[<%= article.Category.Title %>]<%= article.Title %></div>
                    <div class="body">
                        <%= article.Body %>
                        <pre>Posté par <%= article.Author.UserName %></pre>
                    </div>
                </div>
            <% } %>
    J'ai cette erreur :
    Object reference not set to an instance of an object.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

    Source Error:

    Line 12: <div class="body">
    Line 13: <%= article.Body %>
    => Line 14: <pre>Posté par <%= article.Author.UserName %></pre>
    Line 15: </div>
    Line 16: </div>
    Pourtant quand je lance un requête SQL équivalente, tout fonctionne correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
    	dbo.Articles.Title AS Title,
    	dbo.Articles.Body AS Body,
    	dbo.Articles.CreatedAt AS CreatedAt,
    	dbo.Articles.ModifiedAt AS ModifiedAt,
    	dbo.aspnet_Users.UserName AS Author,
    	dbo.Categories.Title AS Category
    FROM
    	dbo.Articles,
    	dbo.Categories,
    	dbo.aspnet_Users
    WHERE
    	dbo.Articles.AuthorUuid = dbo.aspnet_Users.UserId AND
    	dbo.Articles.CategoryUuid = dbo.Categories.Uuid;
    Retourne :
    Testing ASP.NET MVC I am testing ASP.NET MVC 2.0 2010-02-28 20:39:50.340 2010-02-28 20:39:50.340 kedare IT
    Une idée d'ou peut venir le problème ?
    Merci !

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Salut,

    est-que tu as jeté un oeil au SQL généré (en faisant allArtilces.ToString(), ca devrait te donner le sql)

    A première vue, dans un cas, tu fais uen jointure sur Authors, et dans l'autre, sur aspnet_Users

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    Citation Envoyé par Philippe Vialatte Voir le message
    A première vue, dans un cas, tu fais uen jointure sur Authors, et dans l'autre, sur aspnet_Users
    aspnet_Users correspond a Author dans Blog.dbml

    La requête exécuté est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [t0].[Id], [t0].[Uuid], [t0].[Title], [t0].[AuthorUuid], [t0].[CategoryUuid], [t0].[Body], [t0].[CreatedAt], [t0].[ModifiedAt]
    FROM [dbo].[Articles] AS [t0]
    INNER JOIN [dbo].[Categories] AS [t1] ON [t0].[CategoryUuid] = [t1].[Uuid]
    INNER JOIN [dbo].[aspnet_Users] AS [t2] ON [t0].[AuthorUuid] = [t2].[UserId]
    Il fait bien la jointure, mais ne récupère pas le nom de l'auteur ni de la catégorie (c'est bizarre car le nom de la catégorie s'affiche très bien...)

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    ok, pour la requète SQL, c'est normal, dans ta requète LinQ, tu fais :
    Ce qui veut dire qu'il ne vas te récupérer que des articles, et pas le reste des données

    De ce que je me rappelle, si tu as défini tes jointures dans ton modèle, quand tu fais article.Category.Title et article.Author.UserName, il remonte ta relation pour faire un select et récupérer la catégorie et l'auteur (attention aux perfs !!!)

    Essaye de changer ta vue pour avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <% foreach (Article article in (IEnumerable)ViewData.Model) { %>
      <div class="article">
        <div class="title">[<%= article.Category.Title %>]<%= article.Title %></div>
        <div class="body">
          <%= article.Body %>
            <pre>Posté par <%= article.AuthorUuid %></pre>
        </div>
      </div>
    <% } %>
    Peut-être que tu as une ligne ou l'AuthorUuid n'est pas bon

    (ceci dit, vu comme ca, ca devrait fonctionner, mais...)

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre extrêmement actif
    Avatar de kedare
    Homme Profil pro
    SRE
    Inscrit en
    Juillet 2005
    Messages
    1 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : SRE

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 549
    Par défaut
    l'AuthorUuid fonctionne impec.
    Le pire c'est que j'ai bien l'auto-completion pour .Author dans Visual Studio.. donc ca a l'air d'être bien configuré a ce niveau la :/

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Je suppose que c'est parceque tu n'as pas spécifié à EF de ramener aussi les catégories associées aux articles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from articles in dataContext.Articles.Include("Category")
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/04/2008, 18h36
  2. new : Object reference not set to an instance of an object
    Par zulad dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/06/2007, 20h35
  3. Object reference not set to an instance of an object
    Par DjRusty dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 07h26
  4. Réponses: 1
    Dernier message: 28/12/2006, 11h05
  5. Réponses: 1
    Dernier message: 20/04/2006, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo