2016-05-23 46 views
0

我創建了一個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); 
    } 

這是我的分貝關係圖:

elearn relationship diagram

回答

0

這不是MVC的方式來做到這一點。您可以在模型中執行與數據庫相關的操作,而只需在控制器中執行邏輯操作。

看看我的Point Of Sale項目中的代碼。

該代碼來自類Model產品類。

public bool SaveNewProduct(string name, int unitid, int catid, int compid, float salerate, float purchaserate, int openingamout) 
    { 
     string query = "INSERT INTO Products (pname,punitid,pcategoryid,pcompanyid,psalerate,purchaserate,openingamount) VALUES('" + name + "'," + unitid + "," + catid + "," + compid + "," + salerate + ","+purchaserate+"," + openingamout + ")"; 
     int temp = dal.Create(query); 
     if (temp == 1) 
     { 
      return true; 
     } 

     return false; 
    } 

DAL類:

public int Create(string query) 
    { 
     SqlCommand cmd = new SqlCommand(query, conn); 
     conn.Open(); 
     int returnVal = cmd.ExecuteNonQuery(); 
     conn.Close(); 
     return returnVal; 
    } 

控制器部分:

[HttpPost] 
public ActionResult AddNewProduct(string name, string unit, string category, string company, String salerate, string purchaserate, string openingamount) 
{ 
    // You perform the validations first which I am not including. 
    // If all validations are good, then you call the add method from the Products model 

    Products p = new Products(); 
    bool check = p..SaveNewProduct(name, unitid, catid, compid, srate, prate, oamount); 

    if (check) 
    { 
    ViewBag.MessageType = "Success"; 
    ViewBag.Message = "New Product added"; 
    } 
} 

這是你怎麼做的MVC方式。在模型中執行數據庫事務並在Controller中執行邏輯。

的AddNewProduct()形式的產品,創造()從DAL包含了所有你需要知道的約沒有存儲過程

在數據庫中插入的事情你可能有一個look at this以及如果你有興趣。您可以將此Model類繼承到您自己的模型並獲得一些基本功能。

+0

你再次使用存儲過程先生,我剛纔說過如何在學生或老師表中添加值時點擊提交 –

+0

我沒有使用存儲過程,我爲此創建了一個SQL語句。在按鈕上單擊檢查是否向學生的教師提交表格,然後從模型運行該查詢 – Waleed