1

「IncidentActions」テーブルに新しいデータを追加し、同時に「Incident」テーブルの 3 つの列を更新する保存ボタンがあります。

どうすればこれを行うことができますか

これは、これを達成するために使用しているC#コードです。

protected void cmdSave_Click(object sender, EventArgs e)
    {
        Context db = new Context();

        // This will check the Action from the actions table and 
        var actionID = (from i in db.Actions
                       where i.Actions == tbActionType.Text
                       select i.ActionsID).First();

        long ID = Convert.ToInt64(Request.QueryString["IncidentID"]);


        // TODO: update the incident table accordingly
        IncidentAction act = new IncidentAction
        {
            IncidentID = ID,
            ActionDate = (DateTime)dpActionDate.SelectedDate,
            ActionsID = Convert.ToInt32(actionID),
            StatusID = statID,
            IsPublic = false,
            Title = tbTitle.Text.Trim(),
            PeriodValue = Convert.ToInt64(txtDuration.Text),
            Description = txtDescription.Text.Trim(),
            EstimatedCost = txtEstimatedCost.Text == string.Empty ? (decimal?)null : Convert.ToDecimal(txtEstimatedCost.Text),
            ActualCost = txtActualCost.Text == string.Empty ? (decimal?)null : Convert.ToDecimal(txtActualCost.Text),
            LastUpdated = DateTime.Now,
            UpdatedBy = Convert.ToString(loggedInUserName),
            CreatedByUserID = Convert.ToInt32(loggedInUserID),
            Active = true
        };


                db.IncidentActions.Add(act);
                db.SaveChanges();

                Incident inc = new Incident
                {
                    IncidentID = ID,
                    StatusID = statID_new,
                    IncidentPendingDate = DateTime.Now
                };
                db.SaveChanges();
            }

    }
4

2 に答える 2

0

おかげさまで整理できました

私はこのコードを変更しました

db.IncidentActions.Add(act);
            db.SaveChanges();

            Incident inc = new Incident
            {
                IncidentID = ID,
                StatusID = statID_new,
                IncidentPendingDate = DateTime.Now
            };
            db.SaveChanges();

これに

// add to the IncidentAction table.
                db.IncidentActions.Add(act);
                db.SaveChanges();

                // Update the Incident Table.
                Incident inc = (from i in db.Incidents
                                where i.IncidentID == ID
                                select i).First();

                inc.StatusID = statID_new,
                inc.IncidentPendingDate = DateTime.Now;
                db.SaveChanges();
于 2013-06-06T07:47:19.413 に答える
0

Incident1 つの問題は、データベースから正しいレコードを参照していないことです。最初にデータベースにクエリを実行して、更新するレコードを取得できます。

両方を「同時に」(つまり、同じトランザクションで) 実行したい場合は、最初のdb.SaveChanges(). 次に、2 つ目は挿入と更新を一緒に行います。

また、DateTime.Now呼び出されるたびに異なる値を返すこともできます。各レコードでタイム スタンプを一致させたい場合は、DateTime.Now1 回呼び出して、結果を変数に保存し、両方の場所で使用します。

このようなもの:

Context db = new Context();
var now = DateTime.Now;

IncidentAction act = new IncidentAction
{
    IncidentID = ID,
    ...
    LastUpdated = DateTime.Now,
};


db.IncidentActions.Add(act);

Incident inc = db.Incidents.First(i => i.IncidentID == ID);
inc.StatusID = statID_newl
inc.IncidentPendingDate = now;

db.SaveChanges();
于 2013-06-05T14:38:12.223 に答える