1

以下に返されるエンティティが更新されないのはなぜですか?これらはGetではnullであり、stocktakeid変数に値がある場合でも、(db内の)保存後もnullのままです。

protected void GetPipelineState()
        {
            InventoryModelDataContext context = new InventoryModelDataContext(this.ConnectionString);
            var f = from pe in context.StockTakePipelines
                    where pe.StockTakeId == null
                    select pe;
            this.PipeLine = f;
        }

        protected void SavePipelineState()
        {
            InventoryModelDataContext context = new InventoryModelDataContext(this.ConnectionString);
            foreach (StockTakePipeline p in this.PipeLine)
            {
                p.StockTakeId = this.StockTakeId;
            }
            context.SubmitChanges();
        }

編集:Re PK

ここに画像の説明を入力してください

4

1 に答える 1

2

エンティティをローカルからに変更してから、ローカルcontextをにGetPipelineState()呼び出します。SubmitChanges()contextSavePipelineState()

次のようなものを試してください。

    protected IQueryable<StockTakePipeline> GetPipelineState(InventoryModelDataContext context)
    {
        return from pe in context.StockTakePipelines
                where pe.StockTakeId == null
                select pe;
    }

    protected void SavePipelineState()
    {
        using(InventoryModelDataContext context = new InventoryModelDataContext(this.ConnectionString));
        {
          foreach (StockTakePipeline p in GetPipelineState(context))
          {
              p.StockTakeId = this.StockTakeId;
          }
          context.SubmitChanges();
        }
    }

編集:

この質問を見つけた他の人へのメモです。エンティティが更新されないもう1つの原因は、エンティティが実装されていない場合ですINotifyPropertyChangingINotifyPropertyChanged通常は実装されますが、クラスを手動でコーディングして実装を忘れた場合、またはテーブルに主キーがない場合は更新されません(その場合、特定の行を識別できないため、とにかく特定の行を更新する方法はありません。コードgenは、最適化としてこれらの無意味なインターフェイスの実装を削除します)。

于 2012-08-15T10:24:24.423 に答える