1

だから私はモデルを更新しようとしています。私のモデルの設定方法は次のとおりです。

public class Event{
  public int Id {get;set;}
  public string Name {get;set;}
  public DateTime Date {get;set;}
  public int Organizerid {get;set;}

  public virtual User Organizer {get;set;}
}

public class Organizer{
  public int Id {get;set;}
  public string Name {get;set;}

  pubilc virtual iCollection<Event> Events {get;set;}
}

通常のイベントを返すたびにループエラーがスローされ、プルアップする各モデルにあるすべての仮想で [JsonIgnore] を使用する必要があるため、イベント (EventViewModel) の ViewModel を作成しました。また、Web API が現在のモデルについて多くの情報を返すのを防ぎます。いらない情報。

私のViewModel

public class EventVM {
    public string Name {get;set;}
    public DateTime Date {get;set;}
}

そうは言っても、これが私がPUTを処理した方法です

[HttpPut]
        public HttpResponseMessage Put(int eventId, EventVM event)
        {
            if (ModelState.IsValid && eventId== event.Id)
            {

                try
                {
                    Event upEvent = dbcontext.Event.FirstOrDefault(e => e.Id == eventId);
                    upEvent.Name = eventVM.Name;
                    upEvent.Date = eventVM.Date;

                    dbcontext.SaveChanges();
                    return Request.CreateResponse(HttpStatusCode.OK);
                }catch(Exception ex){
                    return Request.CreateResponse(HttpStatusCode.BadRequest);
                }
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }

私の問題は、更新を保存していないことです。TryUpdateModel を実行しますが、WebApi では使用できないようです。ヘルプ!考え?

4

3 に答える 3

0

Entity Framework を使用していて、例が実際のコードから多少不完全である可能性があると仮定すると、切り離されたエンティティの問題である可能性があります。

次の行に沿って何かを追加してみてください。

upEvent.State = EntityState.Modified);
dbcontext.SaveChanges();

dbcontext.SaveChanges();

詳細については、この質問を参照してください。

于 2013-04-06T19:54:03.300 に答える
0

多分あなたのコードのどこかにありますか?

context.Configuration.AutoDetectChangesEnabled = false;

イベントを変更した後、コンテキストがプロパティを変更済みと見なすかどうかを確認することもできます

var nameIsModified = dbcontext.Entry(upEvent).Property(u => u.Name).IsModified;

また、データベースの更新を強制することもできます (ただし、これを解決策とは見なしませんが、問題を診断するまでの回避策と見なします)

dbcontext.Entry(upEvent).Property(u => u.Name).IsModified = true;

プロパティを変更済みとしてマークすると、プロパティの現在の値が元の値と同じであっても、SaveChanges が呼び出されたときにプロパティのデータベースに更新が強制的に送信されます - MSDN

于 2013-04-06T20:13:22.437 に答える