我是MVC3的新手我试图在编辑后执行更新功能内容两个外键(BRANCH_ID,ITEM_MASTER_ID)。 当branch_id或Item_master_id没有被更改时,我面临的问题很容易被更新,但是如果foreigns键改变它会给我一个错误:
存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。
这是我的模特
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);
}
答案 0 :(得分:2)
我想你忘了附上这个对象了:
db.Materials.Attach(material);
db.Entry(material).State = EntityState.Modified;
db.SaveChanges();
答案 1 :(得分: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();