1

次のような datagridview とそれに添付された従業員のリストがあります。

IQueryable<Employee> data = (from em in db.Employees
                             where em.StationID == stationID
                             select em);
dgvView.DataSource = data;


今、データグリッドビューで選択した行で特定の従業員を削除したい:

using (PetrolNetwork db = new PetrolNetwork())
                {
                    Employee empl = (Employee)dgvView.CurrentRow.DataBoundItem;
                    db.Employees.DeleteOnSubmit(empl);
                    db.SubmitChanges();
                }

「接続されていないエンティティを削除できません」という例外が発生したことは驚くことではありません。
このコードを次のように置き換えると、

Employee employee = (from em in db.Employees
                                         where em.ID == empl.ID
                                         select em).Single();
                    db.Employees.DeleteOnSubmit(employee);
                    db.SubmitChanges(); 

すべて正常に動作します、sqlprofiler では、特定の従業員を取得するためにデータベースへの追加の選択が 1 つ表示され、ステートメントから削除されます。
余分な選択ステートメントなしで datagridview から DataBoundItem から取得したときに、従業員を削除するにはどうすればよいですか? 私が見ることができる 1 つのアプローチは、ID で削除するカスタム sproc です。他の最善のアプローチがあるかもしれませんか?

4

1 に答える 1

2

残念ながら、LinqToSql では、削除する前に削除するアイテムを選択する必要があります。

あなたが述べたようにストアドプロシージャを使用することは1つのオプションです。

もう 1 つは、L2S を使用してカスタム SQL ステートメントを実行することです。

result = db.ExecuteCommand("Delete from Employees WHERE id = '2'")
于 2010-09-23T08:21:11.977 に答える