none
Implementer la classe ObjectDataTypeName d'un ObjectDataSource RRS feed

  • Question

  • Bonjour,

    Je voudrais implémenter la classe DataTypeName de mon ObjectDataSource qui doit utiliser les paramètres de mes object comme suit Individu{string ID, string Nom, string Adresse,  int Age, bool Marié,#IDVéhicule(clé étrangère)}.

    J'ai ce message d'erreur

    Impossible de trouver une propriété nommée 'IDVéhicule' sur le type spécifié par la propriété DataObjectTypeName dans ObjectDataSource 'MonObjectDataSource

    Merci de m'aider.

    samedi 8 mars 2014 10:10

Réponses

  • J'ai pu régler le problème de suppression. Il fallait modifier l'état de l'objet dans ObjectSateManager comme suit.

    foreach (var avion in listeAvion)
                {
                    
                    if (avion.ImmatriculationAvion == oAvion.ImmatriculationAvion)
                    {
                        if (avion.EntityState == EntityState.Unchanged)
                        {
    
                            ContexteDAO.ContexteDonnees.ObjectStateManager.GetObjectStateEntry(avion);
                            ContexteDAO.ContexteDonnees.ObjectStateManager.ChangeObjectState(avion, EntityState.Modified);
                            ContexteDAO.ContexteDonnees.Avions.DeleteObject(avion);
                            
    
                           // ContexteDAO.ContexteDonnees.Avions.DeleteObject(oAvion);
                        }
                        else
                        {
    
                            ContexteDAO.ContexteDonnees.Avions.Attach(avion);
                            ContexteDAO.ContexteDonnees.ObjectStateManager.ChangeObjectState(avion, EntityState.Modified);
                            ContexteDAO.ContexteDonnees.DeleteObject(avion);
                            SaveChanges();
                        
                        }
                        
                        //ContexteDAO.ContexteDonnees.Avions.DeleteObject(oAvion);
                        SaveChanges();
                    }  
                }


    La méthode SaveChanges() est la suivante:

     public static void SaveChanges()
            {
                try
                {
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    ContexteDAO.ContexteDonnees.AcceptAllChanges();
                }
                catch (OptimisticConcurrencyException ocex)
                {
                    ContexteDAO.ContexteDonnees.Refresh(RefreshMode.StoreWins, ocex.StateEntries[0].Entity);
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    ContexteDAO.ContexteDonnees.AcceptAllChanges();
                    throw ocex;
                }
            }

    Bon, j'avoue que je ne compte plus monter encore un projet avec EntityFrameWork 4.0, une version ultérieure peut-être. La plupart des solution sur le web sont adaptées à des versions ultérieures.

    lundi 10 mars 2014 16:29

Toutes les réponses

  • Bonjour,

    Je voudrais implémenter la classe DataTypeName de mon ObjectDataSource.
    La classe DataTypeName n'existe pas

    Pouvez vous nous montrer le code ASPX qui permet de configurer votre ObjectDataSource ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    samedi 8 mars 2014 16:20
    Modérateur
  • Bonsoir,

    Au fait, ce n'était qu'un exemple semblable de ma classe.

    Mais le code réel de mon ObjectDataSource est :

     
                <asp:ObjectDataSource ID="AvionsObjectDataSource" runat="server"
                    TypeName="EnrePaxBLL.AvionBLL" SelectMethod="GetListeAvions"  
                    InsertMethod="InsertAvion" DeleteMethod="DeleteAvion"
                    UpdateMethod="UpdateAvion" DataObjectTypeName="EnrePaxDAO.Avion"  
                   >
                    <UpdateParameters>
                        <asp:Parameter Name="oAvion" Type="Object" />
                        <asp:Parameter Name="origoAvion" Type="Object" />
                        
                    </UpdateParameters>
                    
                </asp:ObjectDataSource>

    Avec comme message d'erreur pour les mise à jour :

    Et ceci comme message d'erreur pour les suppressions:

    Un objet ayant la même clé existe déjà dans ObjectStateManager. ObjectStateManager ne peut pas assurer le suivi de plusieurs objets ayant la même clé.



    Cordialement.






    samedi 8 mars 2014 17:16
  • Bonjour,

    j'ai pu régler pour les modifications. L'erreur était due au fait que l'entitySet (ici "Avions") manquaient lors de l'attachement de l'ancienne valeur "origoAvion".

    Quant à la suppression, l'erreur demeure. Ce qui m'amène à poser la question : Comment détacher du Contexte l'objet ayant la même valeur entityKey pour pouvoir attacher, l'objet à modifier?.

    Cordialement.

    lundi 10 mars 2014 07:03
  • J'ai pu régler le problème de suppression. Il fallait modifier l'état de l'objet dans ObjectSateManager comme suit.

    foreach (var avion in listeAvion)
                {
                    
                    if (avion.ImmatriculationAvion == oAvion.ImmatriculationAvion)
                    {
                        if (avion.EntityState == EntityState.Unchanged)
                        {
    
                            ContexteDAO.ContexteDonnees.ObjectStateManager.GetObjectStateEntry(avion);
                            ContexteDAO.ContexteDonnees.ObjectStateManager.ChangeObjectState(avion, EntityState.Modified);
                            ContexteDAO.ContexteDonnees.Avions.DeleteObject(avion);
                            
    
                           // ContexteDAO.ContexteDonnees.Avions.DeleteObject(oAvion);
                        }
                        else
                        {
    
                            ContexteDAO.ContexteDonnees.Avions.Attach(avion);
                            ContexteDAO.ContexteDonnees.ObjectStateManager.ChangeObjectState(avion, EntityState.Modified);
                            ContexteDAO.ContexteDonnees.DeleteObject(avion);
                            SaveChanges();
                        
                        }
                        
                        //ContexteDAO.ContexteDonnees.Avions.DeleteObject(oAvion);
                        SaveChanges();
                    }  
                }


    La méthode SaveChanges() est la suivante:

     public static void SaveChanges()
            {
                try
                {
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    ContexteDAO.ContexteDonnees.AcceptAllChanges();
                }
                catch (OptimisticConcurrencyException ocex)
                {
                    ContexteDAO.ContexteDonnees.Refresh(RefreshMode.StoreWins, ocex.StateEntries[0].Entity);
                    ContexteDAO.ContexteDonnees.SaveChanges();
                    ContexteDAO.ContexteDonnees.AcceptAllChanges();
                    throw ocex;
                }
            }

    Bon, j'avoue que je ne compte plus monter encore un projet avec EntityFrameWork 4.0, une version ultérieure peut-être. La plupart des solution sur le web sont adaptées à des versions ultérieures.

    lundi 10 mars 2014 16:29