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

ASP.NET MVC Discussion :

asp.net mvc + orm dataobject.net


Sujet :

ASP.NET MVC

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut asp.net mvc + orm dataobject.net
    Bonjour,

    je débute en ASP.NET et après plusieurs jours de galères j'ai enfin trouvé les éléments de bases :

    - ASP.NET MVC (je veux du contrôle sur mon code, donc le viewState dégage)
    - Dataobject.net : excellent ORM, je retrouve ce que je faisais avec SQLAlchemy en python.

    Maintenant j'aimerais associer les 2 (qui fonctionnent bien séparément) : c'est à dire créer un projet asp.net mvc avec databoject.net au lieu de linq to sql comme on voit sur tous les guides.

    Mais même en suivant la doc dataobject, j'ai ça ne fonctionne pas...

    merci.

  2. #2
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    mmhhh, il faudrait préciser la question je pense..

  3. #3
    Expert éminent sénior

    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 : 45
    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
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    Maintenant j'aimerais associer les 2 (qui fonctionnent bien séparément) : c'est à dire créer un projet asp.net mvc avec databoject.net au lieu de linq to sql comme on voit sur tous les guides.
    est-ce que tu arrives à faire marcher DataObject tout seul ?

    La seule différence entre utiliser linq to sql et un autre ORM, ce sont les deux lignes par controlleur qui récupèrent ou écrivent les données dans la base

    Par contre, si tu as des retours sur DataObject, ca me dit

    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.

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Séparément, j'ai :
    - un projet MVC (route/contrôleur/vue...)
    - un projet dataobject.net (2 classes pour faire joujou).

    tous 2 sont fonctionnels et m'ont permis de faire des tests et de me familiariser un peu.

    linq to sql n'est pas un vrai ORM à mon sens. Déjà on dessine graphiquement ses classes (rien avoir mais bon) et ça devient vite le bordel quand on veut ajouter des méthodes (il faut recréer une classe fille qui hérite..). Dataobject.net est simple et suit la philoshophie de sqlAlchemy : une classe, une table et des possibilités puissantes de validation des champs directement intégrées ([EmailConstraint], [PastConstraint]...). De plus Dataobjects se charge entièrement de la construction de la base. J'ai qu'une ligne à changer et il me créer entièrement ma base oracle, sql server, mysql...

    J'essaie donc de créer un projet en utilisant c'est 2 éléments : c'est à dire une application asp.net MVC qui utilise dataobjects au lieu de l'habituel linq to sql.

    Je bloque à ce niveau et malheureusement cet exemple (http://blog.alexyakunin.com/2009/11/aspnet-mvc-sample-nerddinner-port-for.html) n'est pas fonctionnel...

    Si quelqu'un a une piste, je suis preneur.

  5. #5
    Expert éminent sénior

    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 : 45
    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
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par devstp Voir le message
    J'essaie donc de créer un projet en utilisant c'est 2 éléments : c'est à dire une application asp.net MVC qui utilise dataobjects au lieu de l'habituel linq to sql.

    Je bloque à ce niveau et malheureusement cet exemple (http://blog.alexyakunin.com/2009/11/...-port-for.html) n'est pas fonctionnel...

    ok, à quel endroit tu bloques, exactement ???

    a la creation du controlleur, de la vue ?
    au moment de ré-écrire les données dans la base ?
    au moment de charger les données ?

    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.

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    je bloque sur le simple affichage d'une liste de personnes de ma table :
    L'extrait de ma vue index.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         <% foreach (var agent in (IEnumerable<MvcApplication3.Models.Agent>)ViewData.Model) { %>
            <tr>     
                <td><%= Html.Encode(agent.Nom)%></td>
                <td></td>
                <td></td>
            </tr>
        <% } %>
    Mon model "Agent" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        [Serializable]
        [HierarchyRoot]
        [Index("Matricule", Unique = true)]
        [Index("Nom")]
        public class Agent : Entity {
     
            [Field, Key]
            public int Id { get; private set; }
     
            [Field]
            [NotNullConstraint]
            public int Matricule { get; set; }
     
            [Field(Length = 30)]
            [NotNullOrEmptyConstraint]
            public string Nom { get; set; }
     
            [Field(Length = 30)]
            public string Prenom { get; set; }
     
        }
    Mon contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
            /**
            * GET: /Agent/
            **/
            public ActionResult Index() {
     
                var domain = SessionManager.Domain;
                using (Xtensive.Storage.Session.Open(domain)) {
                    using (var transactionScope = Transaction.Open()) {
                        using (var region = Validation.Disable()) {
     
                            // Querying the storage using regular LINQ query
                            var agents = Query.All<Agent>();
     
                            /**
                            // pour vérifier que ma requete est bonne : et effectivement, elle l'est. Donc ça ne coince pas à ce niveau
                            foreach (var agent in agents) {
                                  Response.Write("<p>" + agent.Nom + "</p>");                            
                            }
                            /**/
     
                            return View(agents);
                        }
                        transactionScope.Complete();
                    }
                }
     
            }

    L'erreur lors de l'accès à GET /Agent :
    Active Session is required for this operation. Use Session.Open(...) to open it.
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.InvalidOperationException: Active Session is required for this operation. Use Session.Open(...) to open it.

    Erreur source:

    Ligne 14 : <th>Prénom</th>
    Ligne 15 : </tr>
    Ligne 16 : <% foreach (var agent in (IEnumerable<MvcApplication3.Models.Agent>)ViewData["data"]) { %>
    Ligne 17 : <tr>
    Ligne 18 : <td><%= Html.Encode(agent.Nom)%></td>
    Je dois avoir un soucis de le Session.Open(domain) mais je vois pas où ??

  7. #7
    Expert éminent sénior

    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 : 45
    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
    Points : 12 465
    Points
    12 465
    Par défaut
    Je pencherais pour un problème d'évaluation différée

    essaye de faire plutot un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var agents = Query.All<Agent>();
    return View(agents.ToList<Agent>());

    ...pour voir

    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.

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Donc avec :
    model
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         <% foreach (var agent in ViewData.Model) { %>
            <tr>     
                <td><%= Html.Encode(agent.Nom)%></td>
                <td></td>
                <td></td>
            </tr>
        <% } %>
    controler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                            var agents = Query.All<Agent>();
                            return View(agents.ToList<Agent>());
    J'ai cette erreur :
    Opération non valide. La connexion est fermée.
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.InvalidOperationException: Opération non valide. La connexion est fermée.

    Erreur source:

    Ligne 16 : <% foreach (var agent in ViewData.Model) { %>
    Ligne 17 : <tr>
    Ligne 18 : <td><%= Html.Encode(agent.Nom)%></td>
    Ligne 19 : <td></td>
    Ligne 20 : <td></td>

  9. #9
    Expert éminent sénior

    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 : 45
    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
    Points : 12 465
    Points
    12 465
    Par défaut
    ok, on va aller plus loin, alors...

    Est-ce que la propriété Nom est lazy-loaded ? Si oui, elle à besoin d'une connection ouverte, sinon, elle ne pourra pas aller récupérer les données dans la base

    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.

  10. #10
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    je me mets à l'ASP.NET depuis quelques jours mais j'arrive pas à mettre la main sur un exemple simple dataobjects+mvc. Même en reprenant les exemples plus complexes qui mettent en place des "repository" j'ai des erreurs.

  11. #11
    Expert éminent sénior

    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 : 45
    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
    Points : 12 465
    Points
    12 465
    Par défaut
    je me mets à l'ASP.NET depuis quelques jours mais j'arrive pas à mettre la main sur un exemple simple dataobjects+mvc.
    Malheureusement, je crains que les seuls à même de t'aider vont être les gens du support de DataObject, parce que le problème, vu les messages d'erreur, me semblent plus liés à dataobject qu'a mvc

    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.

  12. #12
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    hum, j'ai effectivement une association sur un champs de ma table Agent, pas sur le Nom mais sur le Service. Je te remets mes modèles au complet

    model : Agent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        [Serializable]
        [HierarchyRoot]
        [Index("Matricule", Unique = true)]
        [Index("Nom")]
        public class Agent : Entity {
     
            [Field, Key]
            public int Id { get; private set; }
     
            [Field]
            [NotNullConstraint]
            public int Matricule { get; set; }
     
            [Field(Length = 30)]
            [NotNullOrEmptyConstraint]
            public string Nom { get; set; }
     
            [Field(Length = 30)]
            public string Prenom { get; set; }
     
            [Field]
            [PastConstraint]
            public DateTime BirthDay { get; set; }
     
            [Field]
            [EmailConstraint]
            public string Email { get; set; }
     
            [Field]
            [Association(OnOwnerRemove = OnRemoveAction.Clear)]
            public ServiceInterne ServiceInterne{ get; set; }
     
        }
    model ServiceInterne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        [Serializable]
        [HierarchyRoot]
        [Index("Nom", Unique = true)]
        public class ServiceInterne : Entity {
     
            [Field, Key]
            public int Id { get; private set; }
     
            [Field(Length = 100)]
            [NotNullOrEmptyConstraint]
            public string Nom { get; set; }
     
            [Field]
            [Association(PairTo = "ServiceInterne", OnOwnerRemove = OnRemoveAction.Cascade)]
            public EntitySet<Agent> Agents { get; private set; }
     
        }
    J'ai une liaison 1:N entre agent et service. Ce m'étonne c'est que la requête Query.All() fonctionnait bien sur le projet ou je n'utilisais que DataObject tout seul.

    Voici l'erreur complète (avec mon Active Session du départ) :
    Active Session is required for this operation. Use Session.Open(...) to open it.
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.InvalidOperationException: Active Session is required for this operation. Use Session.Open(...) to open it.

    Erreur source:

    Ligne 14 : <th>Prénom</th>
    Ligne 15 : </tr>
    Ligne 16 : <% foreach (var agent in (IEnumerable<MvcApplication3.Models.Agent>)ViewData["data"]) { %>
    Ligne 17 : <tr>
    Ligne 18 : <td><%= Html.Encode(agent.Nom)%></td>


    Fichier source : c:\www\MvcApplication3\MvcApplication3\Views\Agent\Index.aspx Ligne : 16

    Trace de la pile:

    [InvalidOperationException: Active Session is required for this operation. Use Session.Open(...) to open it.]
    Xtensive.Storage.Session.Demand() +54
    Xtensive.Storage.Linq.Queryable`1.GetEnumerator() +12
    ASP.views_agent_index_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer) in c:\www\MvcApplication3\MvcApplication3\Views\Agent\Index.aspx:16
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256
    System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
    System.Web.UI.Control.Render(HtmlTextWriter writer) +10
    System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
    System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
    System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
    ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) +327
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256
    System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
    System.Web.UI.Control.Render(HtmlTextWriter writer) +10
    System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
    System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
    System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
    System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
    System.Web.UI.Page.Render(HtmlTextWriter writer) +29
    System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +59
    System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
    System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
    System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266

  13. #13
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    it works !!

    J'ai repris le projet d'exemple qu'il y avait dans DataObjects/sandbox/AspnetMvcSample (nerdDinner) et j'ai réussi à le faire marcher. Parti de la j'ai viré tout le superflu. En comparant les fichiers je me suis aperçu qu'il me manquait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <add name="SessionManager" type="Xtensive.Storage.Web.SessionManager, Xtensive.Storage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=93a6c53d77a5296c"/>
    dans mon Web.config. Alors grave docteur ? j'en sais foutrement rien (je débute en asp.net, j'ai pas encore eu le temps de manger toute la doc du web.config) toujours est il que ça a marché aussitôt (plus d'erreur open session).

    Merci à Philippe Vialatte pour le temps passé à m'aider !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sortie de Microsoft ASP.NET MVC Beta
    Par Jérôme Lambert dans le forum Général Dotnet
    Réponses: 17
    Dernier message: 06/11/2008, 23h12
  2. [ASP.NET MVC] C'est quoi ?
    Par DranDane dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/09/2008, 11h48
  3. ASP.NET MVC Preview 4
    Par hollywood dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 22/07/2008, 11h57
  4. Framework ASP.NET MVC
    Par superbobo dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 02/07/2008, 16h11
  5. ASP.NET MVC Preview 2
    Par cereal59 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 04/04/2008, 16h41

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