在Relational数据库表中插入一行

时间:2017-07-25 12:47:47

标签: c# asp.net sql-server asp.net-mvc

我是c#和asp.net mvc的新手。我正在为我们公司建立人力资源门户网站,用户可以在其中提交休假表格......所以我使用mssql作为数据库服务器并使用实体框架工作与之通信。我有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

我似乎无法知道如何做到这一点......

2 个答案:

答案 0 :(得分:2)

您告诉它将UserId放置在离职模型要求User的位置。

您的关系需要用户进入,因此您必须稍微更新您的代码:

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

这将在新的休假记录中引用实际用户。如果你稍后再查看它,你会在休假表中看到一个名为user_Id的列,其中包含一个整数值,并被设置为users表的外键。

请注意,如果没有用户存在指定的Id值,则会出错。如果您预计这是一个问题,请使用.FirstOrDefault()而不是.First(),然后在将其添加到新的离开对象之前考虑该值为null。

答案 1 :(得分:0)

这是预期的,因为User是一个对象,而不是int。你应该做的可能是leave.user.UserId = userId;而不是[假设leave.user属于User类型UserId属性