2

エンティティ内の特定の列が保存/更新されないという腹立たしい問題があります。更新する各プロパティを現在の場所に手動で割り当てるなど、行を更新するさまざまな方法を試しました (以下のコード ブロックを参照)。2 つの列 (absent_type_id と point_value) が期待どおりに更新および保存されますが、何をしても「説明」列は保存されません。

デバッガーをチェックして、db.SaveChanges(); の前の値を確認しました。新しい値に設定されていることを確認しました。ただし、保存後に行を選択 (およびデータベースをチェック) すると、他の値が更新されていることが示されますが、説明は元の状態に戻ります...これはなぜでしょうか?

[HttpPost]
    public JsonResult UpdateOccurrence(int occ_id,
                                       string absent_type, 
                                       string description, 
                                       int point_value)
    {
        try
        {
            // Get id for the absent type
            int absent_type_id = db.AT_absent_types.Single(a => a.absent_type == absent_type).absent_type_id;

            var occurrenceToUpdate = new AT_occurrences
            {
                occ_id = occ_id,
                absent_type_id = absent_type_id,
                description = description,
                point_value = point_value
            };

            db.AT_occurrences.Attach(occurrenceToUpdate);

            db.SaveChanges();

            //return call omitted
        }
        catch (Exception ex)
        {
            return Json(new {Result = "ERROR", Message = ex.Message});
        }
    }

前述したように、point_value と Absent_type を投稿してエンティティを完全に保存および更新すると、説明は保存されません! 理由がわかりません。どんな助けや洞察も大歓迎です-これは私を夢中にさせています! 乾杯!

4

2 に答える 2

0

これはあなたが探している答えではないかもしれませんが、EF で同様の問題に直面するたびに、テーブルを完全に削除してからビルドします。TFS を使用している場合、保留中の変更が機能しない場合はいつでも元に戻すことができます。これは、私が自分でこれを行うときに使用する警告です。

于 2013-09-21T06:09:53.787 に答える
0

「アタッチ」を使用して、切断されたプロパティをコンテキストにアタッチします。私の理解では、Entity Framework は、変更しているプロパティが DB のプロパティと異なることを知る方法がありません。そのため、プロパティを変更したことを EF に明示的に伝える必要があります。このような:

db.Entry(occurenceToUpdate).Property(o=>o.occ_id).IsModified = true;

またはこのように:

db.Entry(occurenceToUpdate).Property("occ_id").IsModified = true;

設定するプロパティごとに繰り返す必要があります。

上記が確実に機能することはわかっていますが、次のことも試すことができます。エンティティ オブジェクトのすべてのプロパティを設定している場合は、次のように機能するかどうかを確認します。

db.Entry(occurenceToUpdate).State = EntityState.Modified.
于 2013-09-19T22:08:45.737 に答える