我是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
我似乎无法知道如何做到这一点......
答案 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
属性