0

こんにちは、コード スミス ツールによって生成された Entity Framework を使用していますが、一括更新に問題があります。グリッドに多くの行があり、一括更新を使用してレコードを更新したいためです。私はそれをやろうとしましたが、私のコードは以下の成功ではありません

try
    {
        TList<PriceSystemItems> _priceSystemCollection = new TList<PriceSystemItems>() ;


        for (int i = 0; i < gvService.Rows.Count; i++)
        {
            _priceSystemItems = new PriceSystemItems();

            EntityDropDownList dataServiceTypeId = (EntityDropDownList)gvService.Rows[i].FindControl("dataServiceTypeId1");
            EntityDropDownList dataPricePlanId = (EntityDropDownList)gvService.Rows[i].FindControl("dataPricePlanId1");
            EntityDropDownList dataNoMatchPlanId = (EntityDropDownList)gvService.Rows[i].FindControl("dataNoMatchPlanId1");
            EntityDropDownList dataSurchargePlanId = (EntityDropDownList)gvService.Rows[i].FindControl("dataSurchargePlanId1");
            CheckBox chkDefault = (CheckBox)gvService.Rows[i].FindControl("chkDefault");
            Label lblPricePlanId = (Label)gvService.Rows[i].FindControl("lblPricePlanId");

            _priceSystemItems.ServiceTypeId = int.Parse(dataServiceTypeId.SelectedValue);
            _priceSystemItems.PriceSystemId = _priceSystemId;
            _priceSystemItems.NoMatchAltPlanId = int.Parse(dataNoMatchPlanId.SelectedValue);
            _priceSystemItems.SurchargePlanId = int.Parse(dataSurchargePlanId.SelectedValue);
            _priceSystemItems.IsDefault = chkDefault.Checked;
            _priceSystemItems.PricePlanId = int.Parse(lblPricePlanId.Text);
            _priceSystemItems.OriginalPriceSystemId = _priceSystemId;
            _priceSystemItems.OriginalServiceTypeId = int.Parse(dataServiceTypeId.SelectedValue);

           _priceSystemCollection.Add(_priceSystemItems);


        }

         _priceSystemItemsService.Update(_priceSystemCollection);
    }
    catch (Exception /*ex*/)
    {


    }
4

1 に答える 1

0

PriceSystemItems オブジェクトを作成してから、更新のために送信していると思います。これは失敗します。Entity Framework には、変更する前にオブジェクトをメモリに取得する必要があるという制限があります。priceSystemItem を取得し、それを変更してコレクションにプッシュし、最後にエンティティ オブジェクトで SubmitChanges を使用する必要があります。

それ以外の場合は、SQL クエリを作成し、エンティティ オブジェクトで ExecuteCommand を使用できます。LINQ クエリは、バッチ実行に取り組むための代替手段でもあります。

http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspxをご覧ください。

于 2012-12-18T06:04:30.823 に答える