我創建了一個elearn的網站,我使用的是數據庫第一個模型,並且我正在使用存儲過程來進行數據插入或更新。但我的老師說不要使用存儲過程,只使用基本的mvc函數。通過外鍵關係添加第二個表值
現在我有一個問題,我有一個註冊表格,需要電子郵件或密碼或老師或學生的角色,角色是一個布爾值,這是真正的教師或虛假的學生。
當我點擊填寫表單或點擊提交按鈕時,它添加用戶信息,但問題是如何添加增加值在學生或老師表時按下提交按鈕與基本功能。
這是我的代碼與存儲的過程:
[HttpPost]
public ActionResult Register(tbl_UserInfo user)
{
try
{
if (ModelState.IsValid)
{
using (var db = new ELearnDataBase())
{
try
{
if (cmd.Parameters != null)
cmd.Parameters.Clear();
if (cs.State != ConnectionState.Open)
cs.Open();
cmd = new SqlCommand("dbo.insertintoInfo", cs); //Table1
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@email", user.Email);
cmd.Parameters.AddWithValue("@pwd", user.Pwd);
cmd.Parameters.AddWithValue("@role", user.Role);
if (cmd.ExecuteNonQuery() > 0)
{
//db.SaveChanges();
if (user.Role) // teacher
{
var modell = db.tbl_UserInfo
.Where(r => r.Email.Equals(user.Email) && r.Pwd.Equals(user.Pwd))
.First();
cmd = new SqlCommand("dbo.AddAddress", cs); //Table1
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", modell.Id);
cmd.Parameters.AddWithValue("@street", "");
cmd.Parameters.AddWithValue("@city", "");
cmd.Parameters.AddWithValue("@state", "");
cmd.Parameters.AddWithValue("@postalCode", 0);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("dbo.AddCourse", cs); //Table1
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@cid", modell.Id);
cmd.Parameters.AddWithValue("@name", "");
cmd.Parameters.AddWithValue("@desc", "");
cmd.Parameters.AddWithValue("@duration", "");
cmd.Parameters.AddWithValue("@fee", 0.00);
cmd.Parameters.AddWithValue("@c_class", "");
cmd.ExecuteNonQuery();
cmd = new SqlCommand("dbo.insertintoTeacherInfo", cs); //Table1
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", modell.Id);
cmd.Parameters.AddWithValue("@dept", "");
cmd.Parameters.AddWithValue("@rank", "");
cmd.ExecuteNonQuery();
cs.Close();
}
else //student
{
var modell = db.tbl_UserInfo
.Where(r => r.Email.Equals(user.Email) && r.Pwd.Equals(user.Pwd))
.First();
cmd = new SqlCommand("dbo.AddAddress", cs); //Table1
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", modell.Id);
cmd.Parameters.AddWithValue("@street", "");
cmd.Parameters.AddWithValue("@city", "");
cmd.Parameters.AddWithValue("@state", "");
cmd.Parameters.AddWithValue("@postalCode", 0);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("dbo.insertintoStudentInfo", cs); //Table1
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", modell.Id);
cmd.Parameters.AddWithValue("@roll", @DateTime.Now.Year + " ElearnWeb"+""+modell.Id);
cmd.ExecuteNonQuery();
cs.Close();
}
return RedirectToAction("Index", "Home");
} //return "Done";
else
{
return RedirectToAction("Index", "Home");
}
// return "Failed";
}
catch (DbEntityValidationException e)
{
Console.WriteLine("Invalid Statement", e);
}
cs.Close();
// return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Data is not correct");
}
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
return View();
}
在不使用存儲過程:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(tbl_UserInfo user)
{
if (ModelState.IsValid)
{
using (ElearnDataBase db = new ElearnDataBase())
{
db.tbl_UserInfo.Add(user);
db.SaveChanges();
}
if (user.Role)//teacher
{
var modell =
db.tbl_UserInfo
.Where(r => r.Email.Equals(user.Email) && r.Pwd.Equals(user.Pwd))
.First();
}
else//student
{
var modell =
db.tbl_UserInfo
.Where(r => r.Email.Equals(user.Email) && r.Pwd.Equals(user.Pwd))
.First();
}
}
return View(user);
}
這是我的分貝關係圖:
你再次使用存儲過程先生,我剛纔說過如何在學生或老師表中添加值時點擊提交 –
我沒有使用存儲過程,我爲此創建了一個SQL語句。在按鈕上單擊檢查是否向學生的教師提交表格,然後從模型運行該查詢 – Waleed