2017-09-04 2 views
0

Ich habe 2 Formulare. Einer heißt Hilfe und ein anderer heißt HelpSolution. Hilfe kann viele Lösungen haben. Hier sind ihre Modelle.Eins-zu-viele-Beziehung Einstellung eines anderen Werts auf falsch

public class Help 
{ 
    public int ID { get; set; } 
    public string Description { get; set; } 
    public Priority? Priority { get; set; } 
    public bool Condition { get; set; } 
    public int? EmployeeID { get; set; } 
    public int? HelpCategoryID { get; set; } 
    public int? HelpTypeID { get; set; } 
    public virtual Employee Employee { get; set; } 
    public virtual HelpCategory HelpCategory { get; set; } 
    public virtual HelpType HelpType { get; set; } 
    public virtual ICollection<HelpSolution> HelpSolutions { get; set; } 
} 

(ja, ich weiß, hat es eine Menge von Werten, die meisten hier nicht wichtig sind, aber die letzte)

public class HelpSolution 
{ 
    public int ID { get; set; } 
    public string Solution { get; set; } 
    public virtual int? HelpID { get; set; } 
    public virtual Help Help { get; set; } 
    public bool Selected { get; set; } 

} 

In der Hilfe-Ansicht habe ich eine neue Aktion Senden genannt, wo Ich bestätige grundsätzlich, welche Lösungen mit Checkboxen gültig sind. In diesem Formular zeige ich die Lösungen dieser speziellen Hilfe (mithilfe der HelpID) in Kontrollkästchen an. Ich möchte ein Formular machen, wo ich einreiche, drücken Sie auf das Kontrollkästchen, und es ändert HelpSolution Wert in der Datenbank von false nach true, weil ich unterscheiden, dass es als eine gültige Lösung ausgewählt wurde (Hilfe kann viele Lösungen und viele gültige haben Einsen).

Ich habe ein ActionResult in der Steuerung erstellt, aber es ist ziemlich Müll, also kam ich hierher, um Hilfe zu fragen, wie könnte ich das tun? Jede Hilfe wird sehr geschätzt.

Hier ist die Aktion:

public ActionResult Submit(int id) 
    { 
     HelpViewModel help = Mapper.Map<Help, 
     HelpViewModel(unitOfWork.HelpRepository.GetByID(id)); 
     if (help == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(help); 
    } 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Submit(HelpViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 

      Help help = Mapper.Map<Help>(model); 
      AddOrUpdateSolutions(help, model.HelpSolutions); 
      unitOfWork.HelpRepository.Update(help); 
      unitOfWork.Save(); 
      return RedirectToAction("Details", new { id = model.ID }); 
     } 
     return View(model); 
    } 

Die Aktion, wo ich versuche, den Wert zu setzen AddOrUpdateSolutions ist, aber ich schrieb es ziemlich schlecht, so würde ich nicht denke, es hilft. Ich muss nur wissen, wie ich dieses Ding machen soll.

+0

[Hier] (http://www.entityframeworktutorial.net/EntityFramework4.3/update-one-to-many-entity-using-dbcontext.aspx) ist eine Möglichkeit, eine untergeordnete Sammlung zu aktualisieren. –

Antwort

0

Nun, ich habe eine Lösung gefunden, wahrscheinlich ist es ziemlich schlecht, aber es funktioniert und ich habe keine anderen Ideen.

PopulateSolutionData füllt nur die Lösungen aus der Datenbank und setzt sie alle auf false. Im Grunde wurde dieses Problem behoben, indem db und nicht UnitOfWork verwendet wurde und nur Werte mit einem if gesetzt wurden und der Entitätsstatus auf modifiziert gesetzt wurde.

Verwandte Themen