【发布时间】:2016-05-23 12:10:50
【问题描述】:
我正在创建一个 elearn 网站,我正在使用数据库优先模型,并且我正在使用存储过程来插入或更新数据。但是我的老师说不要使用存储过程,只使用基本的mvc函数。
现在我有一个问题,我有一个注册表单,其中包含电子邮件或密码或教师或学生角色,角色是一个布尔值,对于教师为 true,对于学生为 false。
当我点击填写表格或点击提交按钮时,它会添加用户信息,但问题是当按下具有基本功能的提交按钮时如何在学生或教师表中添加值。
这是我的存储过程代码:
[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);
}
这是我的db关系图:
【问题讨论】:
标签: c# entity-framework asp.net-mvc-5 ef-database-first