Вставка нескольких строк в таблицу с использованием Entity Framework - PullRequest
3 голосов
/ 12 июля 2010

Мне весело с EF, и я отклеился.

Первоначально я использовал следующий фрагмент кода, используя стандартный linq, который по существу вводит некоторые данные в таблицу.

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();

Теперь я попытался воспроизвести тот же или аналогичный код с помощью EF и полностью отклеился.

Я попытался использовать список и .AddTotblManagePreferences, но получил «Устаревший метод для добавления нового объекта вtblManagePreferences EntitySet.Попробуйте вместо этого использовать метод .Add связанного свойства ObjectSet.

Я кратко рассмотрел ObjectSet, но я не совсем уверен, как изменить код.

    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();

Если бы кто-то использовал что-то в этом духе раньше или мог бы указать мне правильное направление, я был бы очень признателен.

Хотя я полон энтузиазма, я не могу не чувствовать себя толстым как свинья свинья в данный момент.

Ответы [ 3 ]

9 голосов
/ 12 июля 2010

Полагаю, вы воссоздали свою модель в конструкторе Entity Framework? Это должно было создать класс, производный от ObjectContext, специфичный для вашей модели. По соглашению, это заканчивается "сущностями".

Взгляните на свой ManagePreferencesEntities экземпляр - или как называется ваш. На нем должно быть свойство, соответствующее таблице для ваших сущностей, возможно tblManagePreferences. Это экземпляр ObjectSet для этой конкретной таблицы, и у него есть метод AddObject, который можно использовать для добавления объектов в эту таблицу.

Попробуйте это вместо последних 5 или около того строк кода:

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

По умолчанию ObjectSet не поддерживает добавление списков вещей, но легко создать собственный метод расширения:

public static class ObjectSetExtensions
{
     public static void AddObjects<T>(this ObjectSet<T> objectSet, IEnumerable<T> objects)
     {
         foreach (var item in objects)
         {
            objectSet.AddObject(item);
         }
     }
}
1 голос
/ 25 августа 2012

Я сейчас использую Entity Framework 5.
Когда вы используете:

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

тогда только последний из ваших объектов будет вставлен в базу данных.

Но если вы будете использовать:

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

Тогда все ваши объекты будут добавлены.

1 голос
/ 12 июля 2010

Попробуйте следующий код:


manPref.tblManagePreference.Add(prefMemberID);
manPref.tblManagePreference.Add(prefLocationID);
manPref.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...