2017-05-15 18 views
-2

テキストステータスと外部キーステータスIDを更新しようとしています。外部キーC#1つではなく多くの設定エンティティフレームワーク

public class Model : DbModelBuilder 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int id { get; set; } 

    [Required] 
    public string Status { get; set; } //relationship mappings 

    public virtual Statuses StatusId { get; set; } 
} 

public class Statuses 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int id { get; set; } 

    [Required] public string StatusName { get; set; } 
} 

public void updateStatus(String status, int statusId = 0) 
{ 
    using (Context ctx = new Context()) 
    { 
     if (statusId != 0) 
     { 
      if (ctx.Statuses.Any(ts => ts.id == statusId)) 
      { 
       model.StatusId = ctx.Statuses.Find(statusId); 
      } 
     } 
     model.Status = status; 
     ctx.Entry(model).State = EntityState.Modified; 
     ctx.SaveChanges(); 
    } 
} 

テキストステータスは正しく設定されていますが、外部キーのステータスは更新されません。

モデル全体を更新するときに、別のクラスでも同様の機能があり、問題なく動作します。

私はモデルが情報を記録することによって更新されているのを見ることができます。しかし、ctx.savechanges()の後にctx.model.statusIdを記録すると、statusIdは更新されません。

+0

モデル変数はどこで宣言されていますか? 'model.StatusId = ctx.Statuses.Find(statusId);' - FindはIDではなくエンティティを返すので、エラーが発生します。 –

+0

私はその割り当てによって混乱しています 'model.StatusId = ctx.Statuses.Find(statusId);' ...あなたは本当に 'StatusId' *というメンバと' Status'というメンバを持っていますか?私は間違ってタイプしたと仮定し、 'model.Status'に代入する必要があります。その場合、後で同じメンバに代入することで上書きされますか? –

+0

外部キー付きステータスは、アプリケーションがモデルを処理する際にテキストステータスを使用してユーザーにステップバイステップの情報を提供するアプリケーションを通じてモデルを追跡するために使用されます。 –

答えて

0

私はそれを見る方法、ここで3つの可能な実行パスがある:

  1. statusIdパラメータはゼロであり、ifブロック内のコードが実行されません。
  2. statusIdパラメータはゼロではありませんが、データベース内の既存のStatusesエントリのIDと一致しません(したがって、Any()テストは失敗し、model.StatusIdへの割り当ては行われません)。
  3. (SO Any()テストが成功し、且つmodel.StatusIdへの割り当てをが行われる)statusIdパラメータは非ゼロであり、それ既存Statusesエントリの一致IDを行います。あなたはstringプロパティStatusを設定したものの、StatusesエンティティにそれをリンクしたりEFが考えるさせるための何もないので、私はは、model.StatusIdフィールドがSaveChangesによって更新されるように期待していないケース#1では

彼らは関連している。

追加の割り当てが行われていないので、ケース#2の場合と同じです。

は、ケース#3の場合、あなたはSaveChangesを呼び出す前StatusIdプロパティを設定しているので、それはまだSaveChangesを設定する必要があります。

だからあなたが失敗していると思われるケースや、StatusIdの値が更新されると思われる理由がわからないのですか?

+0

ケース#3が外部キーへの変更の保存に失敗しています。私はstatusId setステートメントに達しており、モデルは更新されていますが、変更は決してデータベースにコミットされないことを記録できます。 テキストステータスが更新中です。 –

関連する問題