2015-12-17 16 views
5

Ho un semplice modello MVC4 che aggiunge un elenco DateTime.Now a un elenco List<DateTime>().Elenco data/ora MVC che non salva

Tuttavia, quando eseguo uno EntityState.Modified, le modifiche non vengono mantenute. Ho eseguito il debug di questa modifica modificando un'altra proprietà nel modello e ciò consente di risparmiare.

Quindi sono davvero in perdita sul perché questo non sta salvando. Se qualcuno ha qualche idea del perché non la sua risparmio energetico che sarebbe la vita materiale saver:

Il Modello:

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>(); 
    } 

} 

Ecco il mio codice:

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); 
    } 
+0

cosa è db? Non lo vedo dichiarato all'interno della funzione. – MikeS159

+0

db è ApplicationDbContext, ho aggiornato il codice per riflettere che – Jay

+0

Aggiunto il modello e – Jay

risposta

0

Come Fabio Luz citato nelle sue raccolte di tipo primitive di commenti non sono supportate. Generalmente si presume che una raccolta all'interno di una classe recuperata da un contesto rappresenti una relazione One-to-Many/Many-to-Many.

Quando si costruiscono modelli tenere presente come sarebbero rappresentati in una tabella SQL e avere una colonna con una raccolta all'interno non è supportata in tale struttura. Ora, se si stava facendo riferimento a un altro oggetto (tabella) rispetto all'oggetto (record tabella) avrebbe alcune proprietà, come una chiave primaria, ecc.

Spero che questo aiuti.

Edit:

Ecco un modello di esempio che si potrebbe prendere in considerazione:

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 
} 
1

Modifica Fabio Luz menzionato:

"la raccolta di tipi primitivi (come int, DateTime, bool) non è supportato "

Quindi la soluzione di seguito sembra l'opzione giusta.

Ok, quindi dopo un po 'di delibera. Ho deciso di creare un nuovo modello chiamato vist e avere questo come la lista invece di datetime:

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; 
    } 
} 

ci sono vantaggi a questo. Ora posso memorizzare più informazioni quindi solo il datetime.

Quindi per chiunque abbia avuto lo stesso problema come me. Prendi in considerazione la possibilità di estenderlo al proprio modello per una maggiore flessibilità.