在数据库存储之前计算值的最佳位置



这将是一个简单的人。我只是学习MVC的方式。

我有一个用户为我提供了一个开始时间(start)和一个持续时间(LengthOfShift)为一个工作周期在视图。

我想在数据库中存储开始时间,持续时间和计算的结束时间。

我想我理解模型是进行计算的最佳位置,而在控制器或视图中进行计算并不是最佳实践。

我的简化模型和控制器如下。

任何指针,我做错了什么?

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属性不包含在绑定中。在绑定中包含此属性,它应该可以工作。希望对你有帮助。

使用getter属性为Finish添加正确的完成。不需要额外的代码来计算可以从现有属性轻松派生的值。

最新更新