226 messaggi dal 20 novembre 2014
Ciao ragazzi, è da un po che non mi faccio vivo anche se continuo sempre a seguirvi.
Ho un problema penso parecchio banale con le proprietà di navigazione che mi sta portando problemi nei salvataggi

Queste sono le proprietà
public DbSet<Commessa> Commessa { get; set; }

modelBuilder.Entity<Commessa>()
            .HasMany<FornitureExt>(c => c.FornituraExt)
            .WithRequired(fe => fe.Commessa)
            .WillCascadeOnDelete();


Controller
// GET: FornitureExt/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            FornitureExt fornitureExt = db.FornitureExt.Find(id);
            getTipoDef(fornitureExt.Tipo);
            if (fornitureExt == null)
            {
                return HttpNotFound();
            }
            ViewBag.IDCommessa = new SelectList(db.Commessa, "IDCommessa", "codCommessa", fornitureExt.IDCommessa);
            ViewBag.idCommessaList = fornitureExt.IDCommessa;
            return View(fornitureExt);
        }

        // POST: FornitureExt/Edit/5
        // Per proteggere da attacchi di overposting, abilitare le proprietà a cui eseguire il binding. 
        // Per ulteriori dettagli, vedere http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "IDFornitura,IDCommessa,Tipo,Fornitore,Offerta,Importo,Clausole")] FornitureExt fornitureExt)
        {
            if (ModelState.IsValid)
            {
                fornitureExt.Utente = User.Identity.Name;
                fornitureExt.Modifica = System.DateTime.Now;
                db.Entry(fornitureExt).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index", "FornitureExt", new { idCommessa = fornitureExt.IDCommessa });
            }

            ViewBag.IDCommessa = new SelectList(db.Commessa, "IDCommessa", "codCommessa", fornitureExt.IDCommessa);
            return View(fornitureExt);
        }


questo è il modello di commessa
public class Commessa
    {
        [Key]
        [Required]
        public int IDCommessa { get; set; }
        [StringLength(30)]
        [Required(ErrorMessage = "Inserisci un cod commessa"), MaxLength(30)]
        [Display(Name = "Codice Commessa")]
        public string codCommessa { get; set; }
        [Display(Name = "Data Carico")]
        [Column(TypeName = "DateTime")]
        public DateTime dataCarico { get; set; }
        [Display(Name = "Cliente")]
        public string Cliente { get; set; }
        [StringLength(150)]
        [Display(Name = "Oggetto")]
        public string Oggetto { get; set; }
        [Display(Name = "Importo Commessa")]
        public double importoCommessa { get; set; }
        [Display(Name = "Importo Lavorato")]
        public double importoLavorato { get; set; }
        [Display(Name = "Importo Fatturato")]
        public double importoFatturato { get; set; }
        [Display(Name = "Importo Residuo")]
        public double importoResiduo { get; set; }
        [Display(Name = "Data Inizio")]
        [Column(TypeName = "DateTime")]
        public DateTime dataInizio { get; set; }
        [StringLength(150)]
        [Display(Name = "Responsabile")]
        public string Responsabile { get; set; }
        [StringLength(350)]
        [Display(Name = "Requisiti")]
        public string Requisiti { get; set; }


        //[DefaultValue(0)]
        //[Display(Name = "Documenti da Acquisire")]
        //public int documentiAcquisire { get; set; }

        

        //[Display(Name = "Dati da Acquisire")]
        //public string datiAcquisire { get; set; }
       
        //[Display(Name = "Forniture Esterne")]
        //public int? IDFornitureExt { get; set; }
        //[Display(Name = "Consulenze Esterne")]
        //public int? IDConsulenzeExt { get; set; }
        
        [Display(Name = "Scadenza")]
        [Column(TypeName = "DateTime")]
        public DateTime Scadenza { get; set; }
        [Display(Name = "Data Fine")]
        [Column(TypeName = "DateTime")]
        public DateTime dataFine { get; set; }
        [Display(Name = "Clausole")]
        public string Clausole { get; set; }
        
        //[Display(Name = "Attività di commessa")]
        //public int? IDAttCommessa { get; set; }
        
        [Display(Name = "Attività Effettuate")]
        public int attivitaEffettuate { get; set; }
        [Display(Name = "Attività Residue")]
        public int attivitaResidue { get; set; }
        
        //[Display(Name = "Pianificazione")]
        //public int? IDPianificazione { get; set; }
        
        [Display(Name = "Stato Commessa")]
        public int statoCommessa { get; set; }

        public string Utente { get; set; }
        [Column(TypeName = "DateTime2")]
        public DateTime? Modifica { get; set; }
        

         //Faccio l'hashset per la mappatura 
        public Commessa()
        {
            FornituraExt = new HashSet<FornitureExt>();
            ConsulenzaExt = new HashSet<ConsulenzeExt>();
            AttivitaCommessa = new HashSet<AttivitaDiCommessa>();
            PianificazioneCommessa = new HashSet<PianificazioneCommessa>();
            docDaAcquisire = new HashSet<DocDaAcquisire>();
        }

        public virtual ICollection<FornitureExt> FornituraExt { get; set; }
        public virtual ICollection<FornitureExtTest> FornituraExtTest { get; set; }
        public virtual ICollection<ConsulenzeExt> ConsulenzaExt { get; set; }
        public virtual ICollection<AttivitaDiCommessa> AttivitaCommessa { get; set; }
        public virtual ICollection<PianificazioneCommessa> PianificazioneCommessa { get; set; }
        public virtual ICollection<DocDaAcquisire> docDaAcquisire { get; set; }


    }


questo è il modello di fornitureext
public class FornitureExt
    {
        [Key]
        [Required]
        public int IDFornitura { get; set; }
        public int IDCommessa { get; set; }
        [Display(Name = "Tipo Fornitura")]
        public int Tipo { get; set; }
        [StringLength(100)]
        [Display(Name = "Fornitore")]
        public string Fornitore { get; set; }
        [StringLength(100)]
        [Display(Name = "Offerta")]
        public string Offerta { get; set; }
        [Display(Name = "Importo")]
        public double Importo { get; set; }
        [StringLength(200)]
        [Display(Name = "Clausole")]
        public string Clausole { get; set; }

        public string Utente { get; set; }
        public DateTime Modifica { get; set; }

        public virtual Commessa Commessa { get; set; }
}


questa è la view dell'edit che da errore al salvataggio

@model envirConsulting.Models.FornitureExt

@{
    ViewBag.Title = "Modifica";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Modifica</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Forniture Esterne</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.IDFornitura)

        <div class="form-group">
            @Html.LabelFor(model => model.IDCommessa, "IDCommessa", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("IDCommessa", null, htmlAttributes: new { @class = "form-control", @disabled = "disabled" })
                @Html.ValidationMessageFor(model => model.IDCommessa, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Tipo, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @*@Html.EditorFor(model => model.Tipo, new { htmlAttributes = new { @class = "form-control" } })*@
                @Html.DropDownListFor(model => model.Tipo, new SelectList(ViewBag.StatiDef, "Text", "Value"), "", new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.Tipo, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Fornitore, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Fornitore, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Fornitore, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Offerta, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Offerta, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Offerta, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Importo, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Importo, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Importo, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Clausole, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Clausole, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Clausole, "", new { @class = "text-danger" })
            </div>
        </div>

       

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Salva" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Torna alle forniture", "Index", new { idCommessa = ViewBag.idCommessaList })
</div>


ora il problema è: quando provo a modificare appena clicco su salva il controller va in errore restituendo questo errore

{"L'istruzione UPDATE è in conflitto con il vincolo FOREIGN KEY \"FK_dbo.DocDaAcquisire_dbo.Commessa_IDCommessa\". Il conflitto si è verificato nella tabella \"dbo.Commessa\", column 'IDCommessa' del database \"envirConsulting\".\r\nL'istruzione è stata interrotta."}


andando in debug Commessa sul metodo Edit del controller è null!
Dove sto sbagliando?
Grazie a chiunque voglia aiutarmi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.