我有三个表:玩家,游戏和PlayerGames(联结表)。我有一个与玩家一起创建游戏的工作解决方案,但是我必须直接从Request获取PlayerIds,然后根据需要创建尽可能多的PlayerGames,然后将它们添加到游戏对象中。 我现在拥有的:
创建方法:
public ActionResult Create([Bind(Include = "Id,LocationId,Date")] Game game)
{
if (ModelState.IsValid)
{
int[] ids = Request["PlayerId"].Split(',').Select(Int32.Parse).ToArray(); // fetching the Ids from the form
int lastGameId = !db.Games.Any() ? 0 : db.Games.ToList().Last().Id; // I calculate the next id so I can instantiate the Playergame objects
game.PlayerGames = new List<PlayerGame>();
foreach (int t in ids)
game.PlayerGames.Add(new PlayerGame { GameId = lastGameId + 1, PlayerId = t });
//Save
}
//Redirect
}
观点的相关部分:
@for (int i = 0; i < 6; i++)
{
<div class="form-group">
@Html.LabelFor(model => model.PlayerGames.First().Player, "PlayerId", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("PlayerId", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.PlayerGames.First().Player, "", new { @class = "text-danger" })
</div>
</div>
}
我想更好地使用实体框架,我觉得我通过这样的解决方案解决方案浪费了很多潜力。非常感谢你的时间。
答案 0 :(得分:1)
对你的工作提出质疑以及它是否可以做得更好是好的,但最终没有正确的方式来做到这一点。
然而,由于这属于.NET保护伞,我想说一个好的起点是official tutorials。我喜欢他们为你正在进行的多对多程序所给出的例子,并且之前已经将它作为一个起点用于自我,后来它被改编成更通用的东西。选定的ID应该保存在视图模型中,如示例中所示。我们来看看它:
private void UpdateInstructorCourses(string[] selectedCourses, Instructor
instructorToUpdate)
{
if (selectedCourses == null)
{
instructorToUpdate.Courses = new List<Course>();
return;
}
var selectedCoursesHS = new HashSet<string>(selectedCourses);
var instructorCourses = new HashSet<int>
(instructorToUpdate.Courses.Select(c => c.CourseID));
foreach (var course in db.Courses)
{
if (selectedCoursesHS.Contains(course.CourseID.ToString()))
{
if (!instructorCourses.Contains(course.CourseID))
{
instructorToUpdate.Courses.Add(course);
}
}
else
{
if (instructorCourses.Contains(course.CourseID))
{
instructorToUpdate.Courses.Remove(course);
}
}
}
}
在此示例中,讲师是视图正在更新的主要实体,并且复选框列表用于填充属于此讲师的课程。将它更改为通用类型方法会非常容易,因此您可以将它用于所有实体类型 - 这可能会改善您已经获得的内容吗?