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