ASP.NET MVC / EF4 / POCO / Repository - How zu Aktualisieren Beziehungen?

Ich habe eine 1..* Beziehung zwischen Abgeben und Empfehlungen.

Den relevanten Teil meiner Modell (das ist auch der POCO zugeordnet EF4):

public class Review
{
   public ICollection<Recommendations> Recommendations { get; set; }
}

Auf eine Bearbeiten-Ansicht -, ich vertrete die Empfehlungen als eine Reihe von Checkboxen.

Wenn ich versuche fügen Sie eine neue Empfehlung als Teil der Bearbeitung der Beurteilung (e.g prüfen Sie ein anderes Feld), nichts ist passiert - und ich weiß warum...

Ich den "stub-Technik" aktualisieren mein Entitäten - e.g i erstellen Sie eine Entität mit dem gleichen Schlüssel, befestigen Sie es an der Grafik, dann tun ApplyCurrentValues. Dies funktioniert aber nur für Skalare Eigenschaften, nicht für Navigations-Eigenschaften.

Fand ich diese StackOverflow-Frage die sieht gut aus, aber ich bin versucht, herauszufinden, wie man diese Arbeit mit POCO-s/Repository (und ASP.NET MVC - Einfamilienhaus-Kontext).

So, ich bin mit der POCO ist, review.Recommendations ist ein ICollection<Recommendation>, so kann ich das nicht review.Recommendations.Attach. Ich bin nicht mit Self-Tracking Entitäten, also muss ich manuell arbeiten mit dem Diagramm/ändern tracking -, die bisher nicht ein problem bis jetzt.

So können Sie visualisieren das Szenario:

Kritik:

  • Empfehlungen (ICollection<Recommendation>):
    • RecommendationOne (Recommendation)
    • RecommendationTwo (Recommendation)

Wenn ich auf der Bearbeiten-Ansicht, zwei der Kästchen sind bereits geprüft. Die Dritte (die RecommendationThree) ist deaktiviert.

Aber wenn ich überprüfen, dass das Feld, das obige Modell wird:

Kritik:

  • Empfehlungen (ICollection<Recommendation>):
    • RecommendationOne (Recommendation)
    • RecommendationTwo (Recommendation)
    • RecommendationThree (Recommendation)

Deshalb muss ich anfügen RecommendationThree der graph als neue Entität.

Brauche ich hidden-Felder zu vergleichen mit den geposteten Daten der vorhandenen Person? Oder sollte ich speichern der Entität im TempData und vergleichen Sie die gebuchte Person?

BEARBEITEN

Um Verwirrung zu vermeiden, hier der gesamte app-stack nennen:

ReviewController

[HttpPost]
public ActionResult Edit(Review review)
{
   _service.Update(review); //UserContentService
   _unitOfWork.Commit();
}

UserContentService

public void Update<TPost>(TPost post) where TPost : Post, new()
{
   _repository.Update(post); //GenericRepository<Post>
}

GenericRepository - als GenericRepository<Post>

public void Update<T2>(T2 entity) where T2 : class, new()
{
   //create stub entity based on entity key, attach to graph.

   //override scalar values
   CurrentContext.ApplyCurrentValues(CurrentEntitySet, entity);
}

So, die Update (oder Add oder Delete) Repository-Methoden aufgerufen werden muss für jede Empfehlung, je nachdem, es ist neu/geändert/gelöscht.

InformationsquelleAutor RPM1984 | 2011-01-11
Schreibe einen Kommentar