1

LINQを使用しているシナリオは次のとおりです。次のコードを使用してテーブルをクエリし、1つのレコードを返すメソッドがあります。

private L2SQLData.PatientFile getpatfile(long id)
{
   var db = new HMSDataContext();
   var patfile = 
   (from f in db.PatientFiles.Where(f=> f.Id == id) select   f).FirstOrDefault() ;

   return patfile;
}

次に、別のコードが上記のメソッドを呼び出し、返されたオブジェクト/レコードを取得します。次に、次のように同じテーブルから削除します。

L2SQLData.PatientFile patfile = getpatfile(long.Parse(id));

var db = new HMSDataContext();
db.PatientFiles.DeleteOnSubmit(patfile);
db.SubmitChanges();

実行すると、VS2010は次のエラーで悲鳴を上げます。接続されていないエンティティを削除できません。私は何が間違っているのですか?誰?

4

2 に答える 2

2

グローバルなHMSDataContextdb.PatientFiles.Attach(patfile)を1つだけ使用してみてください

于 2012-06-26T10:33:27.807 に答える
2

私は解決策を思いついた!データコンテキストオブジェクトをクエリして、返されたものと同じIDを持つオブジェクトを取得し、同じデータコンテキストから削除しました。

var delpatfile = db.PatientFiles.SingleOrDefault(p => p.Id == patfile.Id);
                 db.PatientFiles.DeleteOnSubmit(delpatfile);
                 db.SubmitChanges();

同じデータコンテキストからのものであるため、すでに添付されています。これを行う唯一の方法ではないかもしれないので、誰かがまだ答えを持っているなら、気軽に投稿してください。

ありがとう。

于 2012-06-26T11:06:04.923 に答える