Insertion de plusieurs lignes dans un tableau à l'aide d'Entity Framework

c# entity-framework linq-to-entities

Question

Je m'amuse avec EF et je suis décollée.

A l’origine, j’utilisais le bit de code suivant en utilisant linq standard, qui saisissait essentiellement des 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 code, ou un code similaire, à l'aide de l'EF, et je suis totalement bloqué.

J'ai essayé d'utiliser la liste et .AddTotblManagePreferences mais je reçois une méthode «Deprecated» pour ajouter un nouvel objet à l'entité tblManagePreferences. Pensez plutôt à utiliser la méthode .Add de la propriété ObjectSet associée.

J'ai brièvement examiné ObjectSet, mais je ne sais pas trop 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 avait déjà utilisé quelque chose dans ce sens auparavant ou s'il pouvait me diriger dans la bonne direction, je lui en serais très reconnaissant.

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

Réponse acceptée

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

ManagePreferencesEntities votre instance ManagePreferencesEntities - ou ManagePreferencesEntities vôtre. Il devrait tblManagePreferences une propriété correspondant à la table de vos entités, tblManagePreferences peut-être. Il s'agit de l'instance ObjectSet pour cette table spécifique et elle dispose d'une méthode AddObject que vous pouvez utiliser pour ajouter des entités à cette table.

Essayez ceci au lieu des 5 dernières 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 d’objets, mais il est facile de créer sa 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);
         }
     }
}

Réponse populaire

J'utilise l'entité framework 5 maintenant.
Quand vous utilisez:

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

alors seul le dernier de vos objets sera inséré dans la base de données.

Mais si vous voulez utiliser:

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

Ensuite, tous vos objets seront ajoutés.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow