2014-05-06 45 views
3

我是新来的MVC3 im试图执行更新功能后编辑其中的内容两个外键(BRANCH_ID,ITEM_MASTER_ID)。
问题IM branch_id或Item_master_id没有改变该行被更新,但如果夷键改变其扔我一个错误,当面向简单:如何使用entitystate.modified更新外键?

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

这里是我的模型

public partial class MATERIAL 
{ 
    public int ID { get; set; } 
    public int ITEM_MASTER_ID { get; set; } 
    public int BRANCH_MASTER_ID { get; set; } 
    public string NAME { get; set; } 
    public string ADDRESS_DETAILS { get; set; } 

    public virtual BRANCH_MASTER BRANCH_MASTER { get; set; } 
    public virtual ITEM_MASTER ITEM_MASTER { get; set; } 
} 

我的编辑功能代码

[HttpPost] 
public ActionResult Edit(MATERIAL material) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(material).State = EntityState.Modified; 
     db.SaveChanges(); 
     int tempid = material.ID; 
     return RedirectToAction("listcontinue", new { id = tempid }); 

    } 
    return View(material); 
} 

帮助我执行更新,即使我的foreigns键已更改。

这里是我的改进编辑代码

public ActionResult Edit(MATERIAL material) 
    { 
     var temp = Convert.ToString(material.ITEM_NAME); 

     using (var context = new material_managementEntities()) 
     { 
      var temp1 = (from cs in context.ITEM_MASTER 
         where cs.ITEM_NAME == temp 
         select cs.ID).FirstOrDefault(); 
      material.ITEM_MASTER_ID = temp1; 
     } 

     var temp2 = Convert.ToString(material.ITEMGROUP); 

     using (var context = new material_managementEntities()) 
     { 
      var temp3 = (from cs in context.ITEM_GROUP_MASTER 
         where cs.ITEM_GROUP_NAME == temp2 
         select cs.ID).FirstOrDefault(); 
      material.ITEM_MASTER_ITEM_GROUP_MASTER_ID = temp3; 
     } 

     if (ModelState.IsValid) 
     { 
      db.MATERIALs.Attach(material); 
      db.Entry(material).State = EntityState.Modified; 
      db.SaveChanges(); 
      int tempid = material.ID; 
      return RedirectToAction("listcontinue", new { id = tempid }); 

     }   
     return View(material); 
    } 

回答

2

我想你忘了附上对象:

db.Materials.Attach(material); 
db.Entry(material).State = EntityState.Modified; 
db.SaveChanges(); 
+0

没有chrfin即使在附加其不工作的问题后,这里是我的外键chan ges和entity没有采用新的外键标识 – Vikas

+0

奇怪 - 我在这里成功地使用了类似的东西。你能说明你是如何在EF中设置实现的吗? – ChrFin

+0

http://i.stack.imgur.com/rPAbH.png这里是我的EF关系图不要担心abt剩余的列我已经删除了简化的问题和许多关系是一对多 – Vikas

0

我想在上下文EF不知道外键,我有在我更新外键之前先使用包括:

db.Entry(team).State = EntityState.Modified; 
db.SaveChanges(); 

var updatedTeam = db.Teams.Include(x=> x.GameType).Where(x=> x.ID == team.ID).Single(); 
updatedTeam.GameType = db.GameTypes.Find(GameTypeId); 
db.SaveChanges();