MVC日期时间列表未保存

本文关键字:保存 列表 时间 日期 MVC | 更新日期: 2023-09-27 18:27:12

我有一个简单的MVC4模型,它将DateTime.Now添加到List<DateTime>()列表中。

但是,当我执行EntityState.Modified时,这些更改不会被保留。我通过修改模型中的另一个属性来调试它,这样可以很好地保存。

所以我真的不明白为什么这不是储蓄。如果有人对为什么不拯救有任何想法,那将是拯救生命的材料:

型号:

public class Page
{
    public int Id { get; set; }
    public string PageURL { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public List<DateTime> Visits { get; set; }
    public Page()
    {
      Visits = new List<DateTime>();
    }
}

这是我的代码:

private ApplicationDbContext db = new ApplicationDbContext();
   public ActionResult CookiePolicy()
   {
        var page = db.Pages.FirstOrDefault(c => c.PageURL == "cookiepolicy");
        page.Visits.Add(DateTime.Now); // this list of datetime objects does not get updated
        page.Title = "test "; //but this property does
        ViewBag.Title = page.Title;
        db.Entry(page).State = EntityState.Modified;
        db.SaveChanges();
        return View(page);
    }

MVC日期时间列表未保存

编辑Fabio Luz提到:

"基元类型的集合(如int、DateTime、bool)不是支持"

因此,下面的解决方案似乎是正确的选择。

好的,经过深思熟虑。我决定创建一个名为vist的新模型,并将其作为列表,而不是日期时间:

public class Visit
{
    public int Id { get; set; }
    public DateTime DateTime { get; set; }
    public BrowserType BrowserType { get; set; }
    public String Duration { get; set; }
    public int PageId { get; set; }
    public virtual Page Page { get; set; }
    public Visit()
    {
        DateTime = DateTime.Now;
        BrowserType = BrowserType.Other;
    }
}

这样做有好处。现在我可以存储更多的信息,而不仅仅是日期时间。

因此,对于任何和我有同样问题的人来说,考虑将其推出自己的模型,以获得更大的灵活性。

就像Fabio Luz在评论中提到的那样,不支持原始类型集合。从上下文检索的类中的集合通常被认为表示一对多/多对多关系。

在构建模型时,请记住它们在SQL表中的表示方式,并且在这样的结构中不支持包含集合的列。现在,如果您引用的是另一个对象(表),那么该对象(表记录)将具有某些属性,例如主键等。

希望这能有所帮助。

编辑:

以下是您可能需要考虑的示例模型:

public class Page
{
    public int Id { get; set; }
    public string PageURL { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public virtual IQueriable<Visit> Visits { get; set; }    
}
public class Visit
{
    // ...  properties related to data you wish to retain about the visit
    public virtual Page Page { get; set; } // navigation property
}