Ich habe endlich eine Hürde überwunden und kann nun erfolgreich neue Modelldaten erstellen. Jetzt gibt es noch einen Haken - Validierung. Der Großteil der Validierung scheint einfach zu sein, da viele meiner Modelldaten skalare Werte sind. Es gibt jedoch eine Viele-zu-Viele-Beziehung, mit der ich mich verbinde, daher bin ich mir nicht sicher, wie ich das überprüfen soll. Mein Modell ist (wieder einmal):Wie macht man MVC2/EF4 EntityCollection Validierung mit Datenanmerkungen?
Game (only listing the relevant columns):
GameID - int (primary key, auto-incr)
Platform:
PlatformID - int (primary key, auto-incr)
Name - string
GamePlatform (not a visible entity):
GameID - int (foreign key from Games)
PlatformID - int (foreign key from Platforms)
Und meine Methode Create (ja, ich weiß, es ist schlampig und dilettantisch - ich am einen Amateur und versuchen zu lernen, ich werde auf jeden Fall fügt Fehler es zu überprüfen.. ich versuche nur, um das große Bild von der view- zu bekommen> Controller-> Validierungs-> persistieren-in-db/show Fehler verarbeiten unten):
public ActionResult CreateReview([Bind(prefix = "GameData")]Game newGame, int[] PlatformIDs)
{
try
{
foreach(int i in PlatformIDs)
{
Platform plat = _siteDB.Platforms.Single(p => p.PlatformID == i);
newGame.Platforms.Add(plat);
}
newGame.LastModified = Datetime.Now;
_siteDB.Games.AddObject(newGame);
_siteDB.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
das Array von PlatformIDs wird von einer Gruppe geliefert von Kontrollkästchen in meiner Sicht. Damit mein Spiel gültig ist, muss es mit mindestens einer Plattform verknüpft sein. Ich bin mir nicht sicher, wie ich das mit Datenanmerkungen validieren kann oder ob es überhaupt möglich ist. Jede Hilfe würde sehr geschätzt werden.
Ja, das Formular ist ein bisschen ein Problem. Ich habe die Checkboxen manuell hart codiert, so dass es sich größtenteils um reines HTML handelt, deren Werte in einer Schleife mit Model.AllPlatforms [i] .PatformID gesetzt werden. Ich diskutiere immer noch darüber, ob ich der Platform einen nicht-db-backed Boolean hinzufügen soll oder nicht, um anzugeben, ob eine Platform in der Ansicht ausgewählt wurde. Es würde mir erlauben, einen stark typisierten HTML-Helfer zu verwenden, und würde wahrscheinlich die Validierung auf lange Sicht erleichtern. Ihre Gedanken? –
Macht so etwas Sinn? http: // Pastie.org/1311555 –
Hey Kevin, habe gerade meine Antwort bearbeitet. Ich denke, was ich zur Verfügung gestellt habe, ist etwas nach dem, was man tun sollte. Ich bin mir sicher, dass es eine Vielzahl von Möglichkeiten gibt, wie Sie die Checkboxen in das Modell einbinden können, aber letztendlich möchten Sie sie in irgendeiner Form in das Modell einbinden. Lass mich wissen, ob das Sinn macht oder nicht. – nwayve