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);
}
编辑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
}