1

ASP.NET 4.0 C#、Linq to SQL: 新しい行が作成されたら、ID 値を同じ行の別のフィールドに書き戻す必要があるという要件があります。

これを試しましたが、うまくいきませんでした (行が見つからないか、変更されていません):

//newRow created and fields populated here
dc.Table.InsertOnSubmit(newRow);
dc.SubmitChanges();
newRow.Field = newRow.PriKey;
dc.SubmitChanges();

また、行を新しい変数に読み込んで更新しようとしましたが、同じエラーが発生しました:

//newRow created and fields populated here
dc.Table.InsertOnSubmit(newRow);
dc.SubmitChanges();
row2 = (from r in dc.Table where r.PriKey = newRow.PriKey select r).FirstOrDefault();
row2.Field = newRow.PriKey;
dc.SubmitChanges();

独自の SQL コマンドを作成して実行することでこれを簡単に実行できると思いますが、もっと簡単な方法はありますか?

編集:これがトランザクションにラップされているという事実は違いがありますか?

using (CMSDataContext dc = new CMSDataContext(Config.ConnString))
{
    dc.Connection.Open();
    dc.Transaction = dc.Connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
4

2 に答える 2

1

これはLINQ2SQLの制限ではないようです。LINQPadで以下を実行するとうまくいくようです。デバッガーでコードをステップ実行してみましたか? または、実際のコードを投稿して他の問題を確認できますか?

create table data
(
    ID int not null identity primary key,
    Value varchar(16) not null,
    PKStore int null
)

var newRow = new Data{Value = "MyVal"};
Data.InsertOnSubmit(newRow);
SubmitChanges();

newRow.PKStore = newRow.ID;
SubmitChanges();

Data.Dump(); //LINQPad Method

出力

ここに画像の説明を入力

于 2012-04-10T00:42:43.967 に答える
-1

並べ替えて、リストから一番上の行を選択してみてください

dc.Table.InsertOnSubmit(newRow);
dc.SubmitChanges();
row2 = (from r in dc.Table  order by r.PriKey desecnding select r).FirstOrDefault();
row2.Field = row2.PriKey;
dc.SubmitChanges();
于 2012-04-10T00:23:32.843 に答える