在存储到数据库之前计算值的最佳位置
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;
并在控制器中根据 Start
和 LengthOfShift
属性设置值。 (但无论如何,您应该只在数据库中存储 Start
和 LengthOfShift
OR Start
和 Finish
这可能会有所帮助:***.com/questions/4415904/business-logic-in-mvc
【参考方案1】:
尝试在计算字段中添加一个空设置器
【讨论】:
【参考方案2】:在 Create 方法中,Finish 属性不包含在绑定中。将此属性包含在绑定中,它应该可以工作。希望对您有所帮助。
只需使用 Finish 的 getter 属性添加其完成权。不需要额外的代码来计算可以从现有属性中轻松导出的值。
【讨论】:
以上是关于在存储到数据库之前计算值的最佳位置的主要内容,如果未能解决你的问题,请参考以下文章
使用strings.xml 在数据库上存储多语言值的最佳方法?
使用 Unity3d 在 Firebase 中存储 DateTime 值的最佳实践
React 功能组件 - 存储从 props 计算的转换值的位置