В моем примере я пытаюсь создать новый объект, который имеет ссылки на существующие объекты. Мне приходится извлекать полные объекты из базы данных, чтобы ссылаться на них из моего нового объекта.
Извиняюсь за любые небольшие ошибки в коде - я работаю из памяти - у меня нет своего кода со мной.
Моя ViewModel содержит сам объект, два моих ссылочных идентификатора и SelectList ссылочного объекта, поэтому я могу привязаться к раскрывающемуся списку:
public class GameEditViewModel
{
public Game MyGame { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
public SelectList<Team> { get; set; }
}
Я все прекрасно настраиваю и получаю, и объект полностью заполняется, когда я его возвращаю, но проблема возникает, когда я пытаюсь сохранить эту новую игру:
public Game AddGame(GameEditViewModel gameToSave)
{
gameToSave.MyGame.HomeTeam =
context.GetObjectByKey(new EntityKey(context.DefaultContainerName+".Team", "Id", gameToSave.HomeTeamId)) as Team;
context.Attach(gameToSave.MyGame.HomeTeam); // I think I needed this line
gameToSave.MyGame.AwayTeam =
context.GetObjectByKey(new EntityKey(context.DefaultContainerName+".Team", "Id", gameToSave.AwayTeamId)) as Team;
context.Attach(gameToSave.MyGame.AwayTeam);
context.AddToGame(MyGame);
context.SaveChanges();
}
Вы видите проблему здесь - я делаю два дополнительных запроса к базе данных, чтобы получить модели, чтобы я мог связываться с ними. На самом деле, мне нужен только идентификатор.
Если я просто задаю свойства HomeTeam.Id и AwayTeam.Id, контекст думает, что я добавляю новую запись, и жалуется, что не установлены все ссылки, необходимые для объекта Team.
Я предполагаю, что есть лучший / более эффективный способ сделать это, но я довольно плохо знаком с EF. Может ли кто-нибудь просветить меня?