【问题标题】:MVC datetime list not savingMVC 日期时间列表未保存
【发布时间】:2015-12-17 09:30:41
【问题描述】:

我有一个简单的 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);
    }

【问题讨论】:

  • 什么是分贝?我没有看到它在函数中声明。
  • db 是 ApplicationDbContext,我已经更新了代码以反映这一点
  • 也添加了模型
  • 我升级到 VS2015 后似乎缺少 ASP.NET 的东西,一旦我修复它希望我可以看看发生了什么。
  • 不支持原始类型(如 int、DateTime、bool)的集合

标签: c# entity-framework asp.net-mvc-4


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    不支持像 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多