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 は、そのプレーヤーの のみが変更されたことを把握できるほどスマートであるPositionため、次の行に沿って SQL を生成します。

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