Linq - 在db.SaveChanges()调用中未保存的对象中的列表

GMa*_*Man 2 .net linq linq-to-entities entity-framework

我在将以下内容保存到数据库时遇到问题.

我有一个分支列表作为MessageType对象的一部分.我更新代码的第1部分中的分支列表,然后在第2部分中将分支列表保存到MessageType对象,然后调用db.SaveChanges().不幸的是,新的分支列表没有持久化.

// section 1
 List<Branch> myBranches = new List<Branch>();
            foreach (int bid in branches)
            {
                var bran = db.Branches.Find(bid);
                if (bran != null)
                {
                    myBranches.Add(bran);
                }
            }
//section 2
            try
            {

                messagetype.SenderID = eSenderDB.MvcApplication.SenderID;
                messagetype.Branches = myBranches;
                foreach (Branch bra in messagetype.Branches)
                {
                    db.Entry(bra).State = EntityState.Modified;
                    db.SaveChanges();

                }
                //db.Entry(messagetype.Branches).State = EntityState.Modified;
                db.Entry(messagetype).State = EntityState.Modified;

                db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我的Create方法

[HttpPost]
        public ActionResult Create(MessageType messagetype, int[] branches)
        {
            List<Branch> myBranches = new List<Branch>();
            foreach (int bid in branches)
            {
                var bran = db.Branches.Find(bid);
                if (bran != null)
                {
                    myBranches.Add(bran);
                }
            }

            {
                messagetype.Branches = myBranches;
                messagetype.SenderID = eSenderDB.MvcApplication.SenderID;
                messagetype.OptIns = 0;
                db.MessageTypes.Add(messagetype);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(messagetype);
        }
Run Code Online (Sandbox Code Playgroud)

Iro*_*n84 7

您忘了将它们附加到上下文中.请尝试以下代码:

foreach (Branch bra in messagetype.Branches)
{
  db.Branches.Attach(bra);
  db.Entry(bra).State = EntityState.Modified;
  db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

在旁注中,我怀疑SaveChanges在你的foreach循环中有调用.你可以推迟保存到最后,它仍然可以正常工作.