gpt4 book ai didi

c# - 如何更新 Entity Framework 4.5 中的特定列?

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:45 24 4
gpt4 key购买 nike

我有这个生成的实体:

    public partial class Player
{
public int Id { get; set; }
public string Name { get; set; }
public System.DateTime Birthdate { get; set; }
public PlayerPosition Position { get; set; }
public int IdTeam { get; set; }

public virtual Team Team { get; set; }
}

我想创建一个方法来更新玩家的位置。

我这样做:

        Player playerToUpdate = new Player
{
Id = 34,
Position=PlayerPosition.Defender
};
playersRepository.Attach(playerToUpdate);
playersRepository.UpdatePosition(playerToUpdate);

public void Attach(T entity)
{
DbSet.Attach(entity);
}

public void UpdatePosition(Player playerToUpdate)
{
Context.Entry(playerToUpdate).Property(p => p.Position).IsModified = true;
}

我得到一个验证异常(名称字段是必需的)

有什么办法可以解决?

谢谢。

最佳答案

为什么不先加载现有播放器,更新位置,然后保存回来??

它是现有播放器 - 对吗?你显然也有玩家的 ID ...

类似于:

Player existingPlayer = playersRepository.GetByID(34);

existingPlayer.Position = PlayerPosition.Defender;
playersRepository.Save(existingPlayer);

当然,您可以将其包装到您自己的 playersRepository 中的一个方法中:

public void UpdatePosition(int playerID, PlayerPosition newPosition)
{
Player existingPlayer = playersRepository.GetByID(playerID);

existingPlayer.Position = newPosition;
this.Save(existingPlayer); // assuming you have a Save method on the repository
}

然后调用它:

playersRepository.UpdatePosition(34, PlayerPosition.Defender);

Entity Framework 足够聪明,可以识别出只有那个玩家的 Position 发生了变化,因此它会生成类似于以下内容的 SQL:

UPDATE dbo.Player
SET Postion = 'Defender'
WHERE PlayerID = 34

关于c# - 如何更新 Entity Framework 4.5 中的特定列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128997/

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