在我的示例中,我试图创建一个具有对现有对象的引用的新对象。我发现自己不得不从数据库中检索完整的对象,以便从我的新对象中引用它们。是否有一种更简单的方法将关系分配给实体框架中的新对象?
道歉的代码中的任何小错误 - 我从内存工作 - 我没有我的代码与我。
我的视图模型包含对象本身,我的两个参考ID,以及被引用的对象的选择列表,所以我可以绑定到一个下拉:
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();
}
在这里您将看到的问题 - 我做了两个额外的数据库查询检索模式,所以我可以绑定到他们。真的,我应该只需要Id。
如果我只设置了HomeTeam.Id和AwayTeam.Id属性,上下文认为我添加了一条新记录并且抱怨Team对象所需的所有引用都没有设置。
我认为有一个更好/更有效的方法来做到这一点,但我对EF很新。任何人都可以启发我吗?
哇,真的吗?男人......我怎么错过那个......? – Damovisa 2010-02-26 02:38:54
@Damovisa:对不起,但我不知道:) – LukLed 2010-02-26 02:44:47
我想我只是假设它做到了。我会确认何时回家,但我相信你是对的。谢谢 :) – Damovisa 2010-02-26 02:45:58