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

Posted

技术标签:

【中文标题】在存储到数据库之前计算值的最佳位置【英文标题】: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 这可能会有所帮助:***.com/questions/4415904/business-logic-in-mvc 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于在存储到数据库之前计算值的最佳位置的主要内容,如果未能解决你的问题,请参考以下文章

创建聚合表的最佳方法是啥?

使用strings.xml 在数据库上存储多语言值的最佳方法?

使用 Unity3d 在 Firebase 中存储 DateTime 值的最佳实践

React 功能组件 - 存储从 props 计算的转换值的位置

在 mysql 中存储 python timedelta 值的最佳方法是啥?

通过c#代码检索存储在sql表中的Json值的最佳实践