2

我有这个生成的实体:

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

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

修复它的方法是什么?

谢谢。

4

1 回答 1

2

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

这是一个现有的球员 - 对吧?你显然也有玩家的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 足够聪明,可以发现只有Positionon 那个播放器发生了变化,所以它会生成类似于以下内容的 SQL:

UPDATE dbo.Player
SET Postion = 'Defender' 
WHERE PlayerID = 34
于 2012-08-26T09:32:17.740 回答