2

SQL へのリンクとレコードの更新に問題があります。問題は、接続されたデータ コンテキストをループしているという事実に基づいて、現在のトランザクションにあると思います。

    Using db = New PostcodeLookupModelContainer()

        Dim Stores = From b In db.lkpStores Where b.storeId ' = iStoreID '  Order By b.storeId

        For Each store In Stores

            Debug.Print(store.StorePostcode)

            Dim newStore As New lkpStores()
            newStore.depotId = store.depotId
            newStore.StorePostcode = store.StorePostcode
            newStore.depotId = store.depotId
            newStore.DepotDistance = store.DepotDistance

            db.lkpStores.Attach(newStore)
            newStore.DepotDistance = 50

            db.SaveChanges()

        Next store

    End Using

エラーが発生したときの行は db.SaveChanges() で、エラーは「セッションで他のスレッドが実行されているため、新しいトランザクションは許可されていません」です。

4

2 に答える 2

0

新しいオブジェクトは既に存在するため、アタッチする必要はないと考えてください。

db.lkpStores.Attach(newStore)

ForEach ループから store オブジェクトを更新し、submit を呼び出すだけです

   Using db = New PostcodeLookupModelContainer()

        Dim Stores = From b In db.lkpStores Where b.storeId ' = iStoreID '  Order By b.storeId

        For Each store In Stores
            store.DepotDistance = 50
            db.SaveChanges()
        Next store

    End Using

コードをリファクタリングすることもできます

   Using db = New PostcodeLookupModelContainer()

        Dim store = (From b In db.lkpStores Where b.storeId).SingleOrDefault 'Assumming the storeID is unique

        if store isnot nothing then
            store.DepotDistance = 50
            db.SaveChanges()
        end if

    End Using
于 2012-12-21T15:06:20.480 に答える
0

" " を List() に変換してDim Stores = From b In db.lkpStores Where b.storeId ' = iStoreID ' Order By b.storeIdからループしてみてください

于 2012-12-21T15:09:33.210 に答える