在我的mvc应用程序中,我有两个名为的表: 与外键关系相关的详细信息(srNo,ID,工作),主(ID,名称,计划)使用“ID”字段从详细信息发送到主数据。 “ID”字段是主表的主键。 “srNo”字段是详细信息表的主键。
在“ID”字段中,这2个表与外键关系船连接。
现在的问题是: 在向数据库添加任何行时,我们首先在主表中进行输入,然后在详细信息表中进行输入。 有时由于某些异常,在主表中成功添加行但无法添加详细信息表。然后我想从主表执行回滚。
但是当我想要删除最近添加了ID值的行(grom linq to sql)时,这是在主表中添加的,它给了我一个例外,即forign key realtion ship就在那里......
此时详细信息表中没有该id字段的行。
由于
答案 0 :(得分:0)
它接缝也将数据插入子表中。首先,您必须使用deleteallonsubmit(detail)从详细信息表中删除,然后从主表中删除。你能解释一下异常是什么意思,是错误还是验证
public ActionResult CreateRec(Master _Master, IEnumerable<Detail> Detaildata,FormCollection collection)
{
MasterRepo _MasterRepo = new MasterRepo();
if (ModelState.IsValid)
{
if (_detail != null)
{
foreach (var objdetail in DetailData)
{
Detail _Detail = new Detail();
_Detail.FirstField = objdetail.FirstField;
_Detail.SecondField = objdetail.SecondtField;
_Master.Detail.Add(_Detail);
}
}
_MasterRepo.Save();
}
}
答案 1 :(得分:0)
这是代码
master objmaster = new master(); objmaster.id = count; objmaster.name = name1; .. objEntities.AddObject(“master”,objmaster); objEntities.SaveChanges(); 尝试 { detail objDetail =新细节() master objMaster =(来自objEntities.master中的r,其中r.Id == count select r).First(); objDetail.master = objMaster; //假设我得到任何(格式,空指针异常) objDetail.folow = sfields [0]; //如果出现异常,下面的代码将不会被删除
objEntities.AddObject(“detail”,objDetail); objEntities.SaveChanges(); } catch(Exception ex) {
//这里我要删除我在主表中添加的行: //我为此编写代码 master objMasters =(from r in objEntities.master,其中r.Id == count select r).ToList(); objEntities.DeleteObject(objMasters); objEntities.SaveChanges(); }
答案 2 :(得分:0)
我认为您需要将它们一起提交,以便它们处于同一个交易中。然后就不需要编写回滚代码,因为如果细节失败,主文件将不会被插入。 试试这个:
master objmaster= new master();
objmaster.id =count;
objmaster.name= name1;
..
objEntities.AddObject("master", objmaster);
// == removed save changes call here ==
detail objDetail = new detail()
// == no need to reselect master from the database, you already have it
// == so just assign it, and that will take care of the references/foreign-key
objDetail.master = objMaster; // Suppose I get any (format, null pointer exception here)
objDetail.folow = sfields[0]; //In case of exception this below code will not be excecuted
objEntities.AddObject("detail", objDetail);
// == save at the end ==
objEntities.SaveChanges();