【问题标题】:Best place to calculate a value before storage in database在存储到数据库之前计算值的最佳位置
【发布时间】:2015-08-24 02:58:48
【问题描述】:

对于某人来说,这将是一个简单的过程。我只是在学习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);
    }
 }

【问题讨论】:

  • 它没有存储完成时间。
  • 使它成为一个带有 getter 和 setter 的属性 - public DateTime Finish { get; set; } 并在控制器中根据 StartLengthOfShift 属性设置值。 (但无论如何,您应该只在数据库中存储 StartLengthOfShift OR StartFinish

标签: c# entity-framework asp.net-mvc-5


【解决方案1】:

尝试在计算字段中添加一个空设置器

【讨论】:

    【解决方案2】:

    在 Create 方法中,Finish 属性不包含在绑定中。将此属性包含在绑定中,它应该可以工作。希望对您有所帮助。

    只需使用 Finish 的 getter 属性添加其完成权。不需要额外的代码来计算可以从现有属性中轻松导出的值。

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多