2010-10-01 90 views
0

在我的mvc应用程序中,我有两个表名为: 详细信息(srNo,ID,work),master(ID,名称,计划)使用“ID”字段从细节到主人的关键关系。 “ID”字段是主表的主键。 “srNo”字段是详细表的主键。无法从MVC中存在外键的表中删除该行

从“ID”字段中,这2个表与外键关联。

现在的问题是: 在向数据库添加任何行时,我们首先在主表中输入内容,然后在细节表中输入。 有时由于某些例外情况,当行成功添加到主表中但无法添加详细表时。然后我想从主表执行回滚。

但是,当我想最近添加的ID值(格罗姆的LINQ to SQL),这是在主表中添加它给我不同的是forign关键维吾尔船有删除的行.....

并在当时详细表中没有那个id字段的行。

谢谢

回答

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(); 
     } 

} 
+0

没有数据插入子表,当我准备从主表中删除: – 2010-10-01 13:58:23

+0

它不给予任何验证错误,这是给不能删除其中的外键关系的错误存在。 – 2010-10-01 13:59:56

+0

你打电话给一个孩子和家长的提交变更,或者两者都被分开保存到数据库 – Tassadaque 2010-10-01 14:11:11

0

下面是代码

主objmaster =新的主(); objmaster.id = count; objmaster.name = name1; .. objEntities.AddObject(“master”,objmaster); objEntities.SaveChanges(); 尝试 细节objDetail =新细节() master objMaster =(从r在objEntities.master其中r.Id == count select r).First(); objDetail.master = objMaster; //假设我得到任何(格式,空指针例外) objDetail.folow = sfields [0]; //如出现异常,下面的代码将不会被执行

objEntities.AddObject(“detail”,objDetail); objEntities.SaveChanges(); } 赶上(异常前) {

//在这里,我想删除我在主表已经添加了行: //我写在objEntities此 主objMasters =代码(从r。 master where r.Id == count select r).ToList(); objEntities.DeleteObject(objMasters); objEntities.SaveChanges(); }

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();