2010-02-26 57 views
3

在我的示例中,我試圖創建一個具有對現有對象的引用的新對象。我發現自己不得不從數據庫中檢索完整的對象,以便從我的新對象中引用它們。是否有一種更簡單的方法將關係分配給實體框架中的新對象?

道歉的代碼中的任何小錯誤 - 我從內存工作 - 我沒有我的代碼與我。

我的視圖模型包含對象本身,我的兩個參考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很新。任何人都可以啓發我嗎?

回答

3

這不需要數據庫往返:

gameToSave.MyGame.HomeTeamReference.EntityKey = new EntityKey(context.DefaultContainerName+".Team", "Id", gameToSave.HomeTeamId) 
+0

哇,真的嗎?男人......我怎麼錯過那個......? – Damovisa 2010-02-26 02:38:54

+0

@Damovisa:對不起,但我不知道:) – LukLed 2010-02-26 02:44:47

+0

我想我只是假設它做到了。我會確認何時回家,但我相信你是對的。謝謝 :) – Damovisa 2010-02-26 02:45:58

0

你也可以做到這一點,這是海事組織漂亮:

public Game AddGame(GameEditViewModel gameToSave) 
{ 
    gameToSave.MyGame.HomeTeam = new Team { Id = gameToSave.HomeTeamId }; 
    gameToSave.MyGame.AwayTeam = new Team { Id = gameToSave.AwayTeamId }; 

    context.AddToGame(MyGame); 
    context.SaveChanges(); 
} 
相關問題