我正在使用带有 SQL Server 2008 R2 和 PetaPoco ORM 的 ASP.NET 4.0。
Web 表单由选项卡面板组成,例如:
-- 员工一般信息
- 约定
- 教育
每个选项卡面板条目都转到 SQL Server 中的特定表。我有一个主表employee,主键empID。其他表,即约会,教育等都与empID相关。
我有多种方法可以在各个表中保存记录:
AddGeneralInformation保存常规信息选项卡面板记录。
AddAppointment保存约会详情等。
该应用程序在多个用户插入或更新记录的并发环境中使用。
对于插入新记录的第二种和第三种方法,这些方法必须具有正确的 empID。一旦第一种方法(一般信息)保存了记录,empID 将用于其他方法。
问题是,如果我使用:
Select max(empID)
那么它不会选择正确的empID,因为许多用户正在插入记录。
在解决方案上,我觉得是使用包含 SessionID 的另一列并使用此查询:
Select max(empID) where sessionID = SessionID
有没有更可靠的方法来做到这一点?
** 已编辑 **
protected void btnSave_Click(object sender, EventArgs e)
{
Session.Add("TaskFlag", "New");
AddUpdateEmployee();
AddUpdateAddress();
}
protected void AddUpdateEmployee()
{
var db = new PetaPoco.Database("cnWeb");
var emp = new employee(); */
using (TransactionScope scope = new TransactionScope())
{
db.BeginTransaction();
emp.deptcode = txtEmpCode.Text.TrimEnd();
emp.empname = txtEmpName.Text.TrimEnd();
emp.guardianname = txtGuardian.Text.TrimEnd();
emp.relationwithemployee = ddlRelation.Text.TrimEnd();
emp.gender = ddlGender.SelectedItem.Text;
emp.dateofbirth = Convert.ToDateTime(txtDOB.Text.TrimEnd());
if (Session["TaskFlag"].ToString() == "New")
db.Insert(emp);
else if (Session["TaskFlag"].ToString() == "Update")
db.Update<employee>("SELECT * FROM employee WHERE empid = @0", Session["EmployeeID"]);
reuse.CustomClientMessage("Record Saved", this.Page);
ClearFields();
/* Commit Transaction */
db.CompleteTransaction();
scope.Complete();
}
}
protected void AddUpdateAddress()
{
var db = new PetaPoco.Database("cnWeb");
var addr = new emp_address();
using (TransactionScope scope = new TransactionScope())
{
db.BeginTransaction();
/* Permanaent Address */
addr.perm_houseno = txtPermHouse.Text.TrimEnd();
addr.perm_street = txtPermStreet.Text.TrimEnd();
addr.perm_place = txtPermCity.Text.TrimEnd();
addr.perm_pincode = txtPermPincode.Text.TrimEnd();
addr.perm_landlinephone = txtPermLandline.Text.TrimEnd();
addr.perm_mobilephone = txtPermMobile.Text.TrimEnd();
if (Session["TaskFlag"].ToString() == "New")
db.Insert(addr);
else if (Session["TaskFlag"].ToString() == "Update")
db.Update<emp_address>("SELECT * FROM emp_address WHERE empid = @0", Session["EmployeeID"]);
/* Commit Transaction */
db.CompleteTransaction();
scope.Complete();
}
}