Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di xJoeyX
    Registrato dal
    Apr 2011
    Messaggi
    28

    Risultato Query nel Database[MVC 3]

    Salve a tutti pongo il mio problema

    Uso EF CODE FIRST

    Ho un db con una tabella e tre campi

    Tempo1 Tempo 2 Tempo 3 tutti double

    devo fare in modo che Tempo 3 sia il risultato della moltiplicazione dei primi 2...una query del genere

    person.Tempo3 = db.persons.Sum(o => o.Tempo1 * o.Tempo2);

    Ora con il viewbag non mi da noia, il problema e che devo fare in modo che il calcolo avviene durante la creazione dell'elelemnto e sia salvato nel database.... a dirla così sembra banale ma nessuno mi ha risposto da nessuna parte evidentemente non è così semplice. Posto il controller e la view

    CONTROLLER

    public ActionResult Create()
    {
    return View();
    }

    //
    // POST: /Home/Create

    [HttpPost]
    public ActionResult Create(Person person)
    {
    person.Tempo3 = db.persons.Sum(o => o.Tempo1 * o.Tempo2);
    if (ModelState.IsValid)
    {

    db.persons.Add(person);
    db.SaveChanges();
    return RedirectToAction("Index");
    }

    return View(person);


    VIEW

    @using (Html.BeginForm()) {
    @Html.EditorFor(model => model.Tempo1)
    @Html.EditorFor(model => model.Tempo2)
    @Html.HiddenFor(model => model.Tempo3)
    }


    Mi da valore null....

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    stai mettendo un breakpoint sul metodo post per vedere se cio che inserisci in t1 e t2 sia convertito correttamente in double? Tieni presente che quella moltiplicazione la fai ANCHE quando il modelstate non è valido e ritorni nella view SOLO quando il model state non è valido e con molta probabilità (per non dire sicuramente) cio che non va bene è proprio il formato con cui scrivi i numeri in input.
    Ti starai chiedendo che se fosse come sto dicendo io doveva sollevarti un eccezione nel momento in cui provavi a fare la moltiplicazione ma il fatto è che quella che fai è solo la somma dei prodotti t1*t2 dei record GIA salvati nel db quando invece dovresti scrivere molto piu semplicemente:

    person.Tempo3 = person.Tempo1 * person.Tempo2

    Ma poi che te ne fai del prodotto t3 se il modelstate (e quindi i valori dei fattori) sono sbagliati? non potresti spostare quell' operazione di prodotto dentro l'if e togliere quell'hiddenfor dalla view?

    E un altra cosa (che annulla cio che abbiamo detto finora e ti leverebbe via tutte le rogne in un colpo solo): NON SI PROGETTA UN DB CON CAMPI CALCOLATI (se la programmazione fosse una filosofia orientale questo sarebbe stato uno dei principali mantra), visto che usi code first dovresti dichiarare t3 come proprieta calcolata (con solo il metodo get):

    codice:
    public virtual double tempo3 { get { return t1 * t2; } }
    edit:
    e modifica il metodo get che ti ho scritto su controllando che ne t1 ne t2 siano null

  3. #3
    Utente di HTML.it L'avatar di xJoeyX
    Registrato dal
    Apr 2011
    Messaggi
    28
    Mi sei stato molto d'aiuto grazie.

    E un altra cosa (che annulla cio che abbiamo detto finora e ti leverebbe via tutte le rogne in un colpo solo): NON SI PROGETTA UN DB CON CAMPI CALCOLATI (se la programmazione fosse una filosofia orientale questo sarebbe stato uno dei principali mantra), visto che usi code first dovresti dichiarare t3 come proprieta calcolata (con solo il metodo get):

    Mi hai annullato le rogne, convincerò il mio cliente che questa strada é sbagliata da seguire.

    Per esempio pratico ho risolto così, a chi interessa

    http://social.msdn.microsoft.com/For...8-7bfdd03c5e99

    Saluti e grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.