1

最近、Linq を使用して C# アプリケーションを開発しました。処理する必要があるプロファイルのリストを外部データベースから取得しています。一部は新規で、一部は既にデータベースにあり、更新する必要があります。私が今日行っていることは、プロファイル リストを調べて、各プロファイルが存在するかどうかを確認し、そうでない場合は挿入することです。このソリューションは正常に機能しています。

UPDATE ON DUPLICATE のような一括挿入/更新を使用する方法があると確信しています。取得するファイルが巨大で、一括挿入/更新の方がパフォーマンスが優れていることが知られているため、この方法で時間を節約できます。現在使用している反復を避けたいと思います。

insertall は既に保存されている行では機能しません。更新と挿入の両方を組み合わせる必要があります

これが私のコードです。あなたの助けに感謝します。

foreach (Profile tmpProfile in profiles)
            {
                try
                {                      
                    var matchedProfile = (from c in db.ProfileEntities
                                          where c.ProfileId == tmpProfile.Id
                                          select c).SingleOrDefault();

                    if (matchedProfile == null)
                    {
                        //Insert
                        db.ProfileEntities.InsertOnSubmit(EntityMapper.ToEntity(tmpProfile));

                    }
                    else
                    {
                        //Update
                        EntityMapper.ToEntity(ref matchedProfile, tmpProfile);                           

                    }                                               
                }
                catch (System.Data.SqlServerCe.SqlCeException sqlExec)
                {                       

                }
                catch (Exception e)
                {

                }
            }

            db.SubmitChanges();
4

1 に答える 1

2

考えられる最適化の 1 つは、外部アプリケーションから持っているすべてのアイテムのリストを作成し、データベースから一致するすべてのアイテムを一度に読み取ることです。

次に、それらをすべて更新し、残っているものをすべて挿入し、最後に SubmitChanges を呼び出します。これにより、外部から取得したプロファイルごとに 1 回ではなく、データベースへの 2 回のラウンドトリップが発生します。

Linq to SQL の一括更新または一括挿入機能については知りません

于 2009-08-02T16:29:25.627 に答える