Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库中存储之前计算值的最佳位置_C#_Entity Framework_Asp.net Mvc 5 - Fatal编程技术网

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

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

这将是一个简单的一个人。我只是在学习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属性不包括在绑定中。在绑定中包含此属性,它应该可以工作。希望有帮助


只需使用Finish的getter属性添加其done权限。不需要额外的代码来计算可从现有属性轻松派生的值。

它不存储完成时间。请将其设置为具有getter和setter的属性-
public DateTime finish{get;set;}
并在控制器中根据
开始
长度换档
属性设置值。(但您应该只在数据库中存储
Start
LengthOfShift
Start
Finish
,这可能会有所帮助: