gpt4 book ai didi

c# - 在 Entity Framework 中是否有更简单的方法将关系分配给新对象?

转载 作者:行者123 更新时间:2023-11-30 16:34:46 25 4
gpt4 key购买 nike

在我的示例中,我试图创建一个引用现有对象的新对象。我发现自己必须从数据库中检索完整的对象才能从我的新对象中引用它们。

对于代码中的任何小错误深表歉意 - 我靠内存工作 - 我没有带我的代码。

我的 ViewModel 包含对象本身、我的两个引用 ID 和引用对象的 SelectList,因此我可以绑定(bind)到下拉列表:

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();
}

您在这里看到了问题 - 我正在执行两个额外的数据库查询来检索模型,以便我可以绑定(bind)到它们。真的,我应该只需要 Id。

如果我只设置 HomeTeam.Id 和 AwayTeam.Id 属性,上下文会认为我正在添加新记录并提示未设置团队对象所需的所有引用。

我认为有更好/更有效的方法来执行此操作,但我对 EF 还很陌生。谁能赐教一下?

最佳答案

这不需要数据库往返:

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

关于c# - 在 Entity Framework 中是否有更简单的方法将关系分配给新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com