2017-07-25 58 views
1

我對c#和asp.net mvc很新穎。我正在爲我們公司建立人力資源門戶網站,用戶可以在其中提交請假表格......因此,我使用mssql作爲數據庫服務器並使用Entity Frame工作來與其進行通信。我有3個實體,用戶(包含用戶詳細信息),權限(允許在應用程序中執行操作的用戶權限),然後是離開表單表單(存儲表單詳細信息的位置)。用戶許可和用戶許可之間存在一對多關係。我並不擔心在創建用戶帳戶時創建的權限。在關係數據庫表格中插入一行

我面臨的問題是,如何爲特定用戶添加假表單?以下是我的控制器代碼:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Leave(MasterViewModel model) 
{ 
    DocSubViewModel mv = model.DSModel; 
    int userId = Convert.ToInt32(Session["userID"]); 
    try 
    { 
     using (HrDcpDBContainer db = new HrDcpDBContainer()) 
     { 
      var leave = db.leaves.Create(); 
      leave.dateFrom = mv.DateFrom; 
      leave.dateSubmitted = DateTime.Now; 
      leave.dateTo = mv.DateTo; 
      leave.nrDays = mv.NrDays; 
      leave.reason = mv.SpecialLeave; 
      leave.TLApproval = null; 
      leave.TLApprovalDate = null; 
      leave.TLApprovalID = mv.TeamLeaderID; 
      leave.DMApprovalDate = null; 
      leave.DMApprovalID = mv.DepManagerID; 
      leave.DMApproval = null; 
      leave.type = mv.Type; 
      leave.user = userId; 
      db.leaves.Add(leave); 
      db.SaveChanges(); 
     } 
     ViewBag.Message = "Leave Form submitted Successfully. You will be redirected shortly..."; 
     return View("result"); 
    } 
    catch (Exception ex) 
    { 
     ViewBag.Message = ex; 
     //ViewBag.Message = "Leave Form submitted Successfully. You will be redirected shortly..."; 
     return View("result"); 
    } 

問題出在leave.user = userId;。它說:

無法隱式轉換的int Portal.Model.user

我似乎無法找出如何做到這一點...

+0

這是因爲你將userId分配給'user'。用戶是一個整數類型嗎?我的猜測是這是一個對象 – jamiedanq

+0

leave.user是數據庫中的主鍵 –

+0

是leave.user.userid嗎? – Amit

回答

2

你告訴它把UserId您的休假模式是要求一個User

你們的關係需要一個用戶那裏去,所以你必須更新你的代碼一點點:

using (HrDcpDBContainer db = new HrDcpDBContainer()) 
{ 
    var leave = db.leaves.Create(); 
    leave.user = db.users.First(x => x.Id == userId); 
} 

這將使參考實際的用戶在新的假期記錄。如果稍後再檢查一下,則會在離開表中看到一個名爲user_Id的列,該列中有一個整數值,並設置爲用戶表的外鍵。

請注意,如果沒有用戶存在指定的Id值,則會出錯。如果您預計這會成爲問題,請使用.FirstOrDefault()而不是.First(),然後在將值添加到新的離開對象之前將其值爲空。

+0

謝謝,非常有道理,但嘗試自己弄清楚這一點很困難。 C#不是一種寬容的語言。謝謝您的幫助! – Hennericho

+0

小錯字有...'x = .'應該是'x =>' – Rahul

+0

哈哈謝謝...該死我的120 wpm打字速度大聲笑 – Ortund

0

,自User的預期是而不是int。什麼,你應該做的或許是leave.user.UserId = userId;而非[假設leave.user是具有UserId財產User類型]

+0

不需要任何假設。 OP確認了leave.user的類型,當他在問題的底部引用了錯誤信息:) – Ortund

+0

@Ortund,是的,但實際的假設是它有一個名爲userid的屬性 – Rahul

+0

噢,對不起,我沒有看到你在你的答案中做了什麼...改變失明...我看到了我期望看到的,我沒想到看到你設置'leave.user.UserId' xD – Ortund