使用Entity Framework将多行插入表中

c# entity-framework linq-to-entities

我和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添加新对象。请考虑使用关联的ObjectSet属性的.Add方法。

我已经简要介绍了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();

如果有人之前沿着这些方向使用了某些东西,或者可以指出我正确的方向,我将非常感激。

虽然热情,但我还是忍不住感觉像猪屎一样浓浓。

一般承认的答案

我假设您已在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);
         }
     }
}

热门答案

我现在正在使用实体框架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();

然后将添加所有对象。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因