2010-07-12 6 views
3

Je m'amuse avec EF et je suis déconnecté.Insertion de plusieurs lignes dans une table à l'aide d'Entity Framework

À l'origine, j'ai utilisé le bit de code suivant en utilisant linq standard qui entre essentiellement certaines données dans une table.

ManagePreferencesDataContext manpref = new ManagePreferencesDataContext(); 

       tblManagePreference prefMemberID = new tblManagePreference(); 
       { 
        prefMemberID.Username = CreateUserWizard1.UserName; 
        prefMemberID.MemberID = tbxMemberID.Text.ToString(); 
        prefMemberID.LocationID = tbxLocationID.Text.ToString(); 
        prefMemberID.Preference = "MemberID"; 
       } 

       tblManagePreference prefLocationID = new tblManagePreference(); 
       { 
        prefLocationID.Username = CreateUserWizard1.UserName; 
        prefLocationID.MemberID = tbxMemberID.Text.ToString(); 
        prefLocationID.LocationID = tbxLocationID.Text.ToString(); 
        prefLocationID.Preference = "LocationID"; 
       } 


       List<tblManagePreference> ie = new List<tblManagePreference>(); 
       ie.Add(prefMemberID); 
       ie.Add(prefLocationID); 

       manpref.tblManagePreferences.InsertAllOnSubmit(ie); 
       manpref.SubmitChanges(); 

Maintenant, j'ai essayé de reproduire le même, ou un code similaire en utilisant l'EF et ont totalement décollée.

J'ai essayé d'utiliser la liste et .AddTotblManagePreferences mais recevoir une "Méthode obsolète pour ajouter un nouvel objet à l'EntitySet tblManagePreferences. Envisagez d'utiliser la méthode .Add de la propriété ObjectSet associée à la place.

J'ai brièvement regardé ObjectSet mais je ne suis pas vraiment sûr de savoir comment modifier le code.

VDSORDAL.PDC_VDSOREntities manpref = new PDC_VDSOREntities(); 
     tblUserPreference prefMemberID = new tblUserPreference(); 

     { 
      prefMemberID.Username = CreateUserWizard1.UserName; 
      prefMemberID.MemberID = tbxMemberID.Text.ToString(); 
      prefMemberID.LocationID = tbxLocationID.Text.ToString(); 
      prefMemberID.ColumnName = "MemberID"; 


     } 

     tblUserPreference prefLocationID = new tblUserPreference(); 
     { 
      prefLocationID.Username = CreateUserWizard1.UserName; 
      prefLocationID.MemberID = tbxMemberID.Text.ToString(); 
      prefLocationID.LocationID = tbxLocationID.Text.ToString(); 
      prefLocationID.ColumnName = "LocationID"; 
     } 

    List<tblUserPreference> ie = new List<tblUserPreference>(); 
     ie.Add(prefMemberID); 
     ie.Add(prefLocationID); 


     manpref.AddObject(PDC_VDSOREntities,ie); 
     manpref.SaveChanges(); 

Si quelqu'un a utilisé quelque chose le long de ces lignes avant ou pourrait me diriger dans la bonne direction, je serais très reconnaissant.

Bien que enthousiaste, je ne peux pas m'empêcher de me sentir épaisse comme un caca de cochon pour le moment.

+0

Oui il y a une propriété appelée tblUserPreferences (Désolé - j'ai essayé d'ajouter à notre fil de commentaires, mais je ne pouvais pas: S) –

Répondre

9

Je présume que vous avez recréé votre modèle dans le concepteur Entity Framework? Cela aurait dû créer une classe dérivant de ObjectContext spécifique à votre modèle. Par convention, cela se termine par "Entités".

Jetez un oeil à votre instance ManagePreferencesEntities - ou quel que soit le vôtre est appelé. Il devrait avoir une propriété correspondant à la table pour vos entités, tblManagePreferences peut-être. C'est l'instance ObjectSet pour cette table spécifique, et elle a une méthode AddObject que vous pouvez utiliser pour ajouter des entités dans cette table.

Essayez plutôt des dernières 5 ou si des lignes de code:

manpref.tblUserPreferences.AddObject(prefMemberId); 
manpref.tblUserPreferences.AddObject(prefLocationId); 
manpref.SaveChanges(); 

Par défaut ObjectSet ne prend pas en charge l'ajout de listes de choses, mais il est facile de créer votre propre méthode d'extension:

public static class ObjectSetExtensions 
{ 
    public static void AddObjects<T>(this ObjectSet<T> objectSet, IEnumerable<T> objects) 
    { 
     foreach (var item in objects) 
     { 
      objectSet.AddObject(item); 
     } 
    } 
} 
+0

Bonjour Samuel, merci pour regarder pour moi. J'ai essayé ce qui suit (voir modification ci-dessus) mais sans succès. Toutes mes excuses pour être épaisse - très nouveau à tout cela et qute hors de ma profondeur! –

+0

Pouvez-vous confirmer qu'il existe une propriété appelée tblUserPreferences sur PDC_VDSOREntities? –

+0

Spot sur !!! Quel outil je suis. Donc, l'EF n'aime pas ajouter dans les listes? –

1

Essayez le code suivant:


manPref.tblManagePreference.Add(prefMemberID); 
manPref.tblManagePreference.Add(prefLocationID); 
manPref.SaveChanges(); 
1

J'utilise Entity Framework 5 maintenant.
Lorsque vous utilisez:

objectcontext.Add(yourobject1); 
objectcontext.Add(yourobject2); 
objectcontext.SaveChanges(); 

alors que la dernière de vos objets seront insérés dans la base de données.

Mais si vous utilisez:

objectcontext.Entry(yourobject1).State = System.Data.EntityState.Added; 
objectcontext.Entry(yourobject2).State = System.Data.EntityState.Added; 
objectcontext.SaveChanges(); 

Alors tous vos objets seront ajoutés.

Questions connexes