主表YearJobCenter,从表YearJobIndex
插入部分代码,3个按钮事件分别为单独的插入主表、从表,和级联插入中从表:
值得注意的是,我开始的代码犯了一个低级错误
从表获取主表标识列ID不能用jobindex.Id = jdc.YearJobCenters.Select(c => c.Id).Single();
表中并非1条数据,当然会抛异常sequence contains more than one element。
正确:jobindex.Id = jdc.YearJobCenters.Max(p => p.Id);
protected void btnInsertJobindex_Click(object sender, EventArgs e) { try { using (StreamWriter sw = new StreamWriter(HttpContext.Current.Server.MapPath("logIndex.txt"), false)) { sw.WriteLine(DateTime.Now); sw.WriteLine("---job index---"); jdc.Log = sw; YearJobIndex jobindex = new YearJobIndex(); /*jobindex.Id = jdc.YearJobCenters.Select(c => c.Id).Single();will throw exception: sequence contains more than one element */ jobindex.Id = jdc.YearJobCenters.Max(p => p.Id); ScriptManager.RegisterClientScriptBlock(this.Button1, this.Button1.GetType(), "asfasfxjs", string.Format("alert('Select for DB\\r\\nLast JobCenter ID :{0}');", jobindex.Id), true); jobindex.SchoolId =int.Parse( txtSchoolId.Text); jobindex.Uid = Guid.NewGuid(); jobindex.Status = 0; jobindex.IsLocked = false; jdc.YearJobIndexes.InsertOnSubmit(jobindex); jdc.SubmitChanges(); BindIndexData(); } } catch (Exception ex) { Response.Write(ex.ToString()); } } protected void btnInsertJobcenter_Click(object sender, EventArgs e) { try { using (StreamWriter sw = new StreamWriter(Server.MapPath("logCenter.txt"), false)) { sw.WriteLine(DateTime.Now); sw.WriteLine("---job center---"); jdc.Log = sw; YearJobCenter jobcenter = new YearJobCenter(); jobcenter.SchoolId = int.Parse(txtSchoolId.Text); jobcenter.JobNumber = txtJobNumber.Text; jobcenter.BookTypeEstimatated = 1; jobcenter.OnlineImageCounter = 1; jobcenter.OfflineImageCounter = 0; jdc.YearJobCenters.InsertOnSubmit(jobcenter); jdc.SubmitChanges(); string alertText = string.Format("alert('Increase Successful! \\r\\nLast JobCenter ID :{0}');", jobcenter.Id); ScriptManager.RegisterClientScriptBlock(this.Button1, this.Button1.GetType(), "asfasfxjs", alertText, true); BindCenterData(); } } catch (Exception ex) { Response.Write(ex.ToString()); } } protected void btnInsertCascade(object sender, EventArgs e) { try { using (StreamWriter sw = new StreamWriter(Server.MapPath("logCenter.txt"), false)) { sw.WriteLine(DateTime.Now); sw.WriteLine("---job center and job index---"); jdc.Log = sw; using (TransactionScope scope = new TransactionScope()) { YearJobCenter jobcenter = new YearJobCenter(); jobcenter.SchoolId = int.Parse(txtSchoolId.Text); jobcenter.JobNumber = txtJobNumber.Text; jobcenter.BookTypeEstimatated = 1; jobcenter.OnlineImageCounter = 1; jobcenter.OfflineImageCounter = 0; YearJobIndex jobindex = new YearJobIndex(); jobindex.SchoolId = jobcenter.SchoolId; jobindex.Uid = Guid.NewGuid(); jobindex.Status = 0; jobindex.IsLocked = false; jobcenter.YearJobIndexes=jobindex; jdc.YearJobCenters.InsertOnSubmit(jobcenter); jdc.SubmitChanges(); /* YearJobIndex jobindex = new YearJobIndex(); jobindex.Id = jobcenter.Id; jobindex.SchoolId = jobcenter.SchoolId; jobindex.Uid = Guid.NewGuid(); jobindex.Status = 0; jobindex.IsLocked = false; jdc.YearJobIndexes.InsertOnSubmit(jobindex); jdc.SubmitChanges(); */ string alertText = string.Format("alert('Insert Cascade Successful!');"); ScriptManager.RegisterClientScriptBlock(this.Button1, this.Button1.GetType(), "asfasfxjs", alertText, true); this.GridView1.DataSource = jdc.YearJobCenters.OrderBy(p => p.Id); this.GridView1.DataBind(); this.GridView2.DataSource = jdc.YearJobIndexes.OrderBy(p => p.Id); this.GridView2.DataBind(); } } } catch (Exception ex) { Response.Write(ex.ToString()); } }