2

私はこの問題に完全に困惑しています。私はしばらく探していましたが、問題を解決する方法についてまだ答えがありません。

値を設定しようとするクエリを実行します。問題は、read only指定しないと変数として表示されることですSelect New With。指定するSelect New Withと、データベースは更新されません。コードの一部を以下に示します。

私の目標は、シューターがDataGridViewデータベースを更新できるようにすることです。StackOverflow に関する別の質問でDataGridView、ユーザーがデータを入力するだけではデータベースが更新されないと言われました。そこで、以下のコードを実行する更新ボタンを作成しました。

コード:

クエリを使用Select New Withすると、変数を編集できますが、データベースにコミットしません:

Dim query = From t In db.Trophies _
            Select New With {t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed}

クエリで変数を編集できません。エラー メッセージには、「Property 'TrophyName' is 'ReadOnly':

Dim query = From t In db.Trophies _
            Select t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed

結果を更新するコード:

Dim i as integer = 0
For Each result In query
    result.WinnerId = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("WinnerId").Index).Value
    result.Name = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("Name").Index).Value
    result.Score = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("Score").Index).Value
    db.SubmitChanges()
    i += 1
Next

テーブル:

PRIMARY KEY TrophyId int auto-increments
TrophyName varchar(50)
WinnerId char(7) Allow Nulls
Name varchar(20) Allow Nulls
Score int Allow Nulls
Printed bit

アドバイスや回答をいただければ幸いです。

編集:に設定しようとしましObjectTrackingEnabledTrueが、問題は解決しませんでした。

編集:ユーザーがデータベースを更新し、更新ボタンを必要としなくなっedit modeDataGridViewI 呼び出しを終了した後、より「自動」更新を行うようにします。db.SubmitChanges

4

1 に答える 1

2

を使用Select new with { ...すると匿名オブジェクトが作成され、そのオブジェクトへの変更はデータベースに送信されません。linqエンティティを操作する必要があります。例えば:

Dim query = From t In db.Trophies _
            Select t

または単に

Dim query = db.Trophies

それはうまくいくでしょう。

于 2013-01-21T20:28:08.057 に答える