C# 在数据库中存储之前计算值的最佳位置
这将是一个简单的一个人。我只是在学习MVC的方式 我让用户为我提供视图中某个工作周期的开始时间(start)和持续时间(LengthOfShift) 我想在数据库中存储开始时间、持续时间和计算的完成时间 我认为我理解模型是进行计算的最佳位置,在控制器或视图中进行计算不是最佳实践 我的简化模型和控制器如下。这似乎不起作用 有没有关于我做错了什么的指示 型号C# 在数据库中存储之前计算值的最佳位置,c#,entity-framework,asp.net-mvc-5,C#,Entity Framework,Asp.net Mvc 5,这将是一个简单的一个人。我只是在学习MVC的方式 我让用户为我提供视图中某个工作周期的开始时间(start)和持续时间(LengthOfShift) 我想在数据库中存储开始时间、持续时间和计算的完成时间 我认为我理解模型是进行计算的最佳位置,在控制器或视图中进行计算不是最佳实践 我的简化模型和控制器如下。这似乎不起作用 有没有关于我做错了什么的指示 型号 public class Shift { public int ShiftId { get; set; } public st
public class Shift
{
public int ShiftId { get; set; }
public string Code { get; set; }
public DateTime Start { get; set; }
public TimeSpan LengthOfShift { get; set; }
public DateTime Finish
{
get {
return Start.Add(LengthOfShift);
}
}
}
控制器
public class ShiftsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Shifts
public ActionResult Index()
{
return View(db.Shifts.ToList());
}
// GET: Shifts/Create
public ActionResult Create()
{
return View();
}
// POST: Shifts/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ShiftId,Code,Start,LengthOfShift")] Shift shift)
{
if (ModelState.IsValid)
{
db.Shifts.Add(shift);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(shift);
}
}
尝试将空setter添加到Create方法中的计算字段中,Finish属性不包括在绑定中。在绑定中包含此属性,它应该可以工作。希望有帮助
只需使用Finish的getter属性添加其done权限。不需要额外的代码来计算可从现有属性轻松派生的值。它不存储完成时间。请将其设置为具有getter和setter的属性-
public DateTime finish{get;set;}
并在控制器中根据开始
和长度换档
属性设置值。(但您应该只在数据库中存储Start
和LengthOfShift
或Start
和Finish
,这可能会有所帮助: