2010-11-28 13 views
1
 public void Delete(Dinner dinner) 
     { 
      List<RSVP> rsvps = dinner.RSVPs.ToList();// This clone looks inefficient. 

      foreach (RSVP rsvp in rsvps) 
       entities.RSVPs.DeleteObject(rsvp); 

      entities.Dinners.DeleteObject(dinner); 
     } 

alt textEFでは、親ローを最初に参照している子ローを子ロークローンで削除して、それを削除すると効率的ですか?

QUESTION:

子行クローンを通じて最初にそれを参照する子行を削除することにより、親行を削除するには、非効率的になります。

子行を複製すると、私は思うほど膨大なリソースを消費します。

もしそうなら、もっと良い方法は何ですか?

EDIT 1:外部キーのカスケードの削除規則を設定し

namespace NerdDinner.Models 
{ 
    public class DinnerRepository 
    { 
     private NerdDinnerEntities entities = new NerdDinnerEntities(); 

     public IQueryable<Dinner> FindAllDinners() 
     { 
      return entities.Dinners; 
     } 

     public IQueryable<Dinner> FindUpcomingDinners() 
     { 
      return from dinner in entities.Dinners 
        where dinner.EventDate > DateTime.Now 
        orderby dinner.EventDate 
        select dinner; 
     } 

     public Dinner GetDinnerByID(int DinnerID) 
     { 
      return entities.Dinners.FirstOrDefault(d => d.DinnerID == DinnerID); 
     } 

     public void Add(Dinner dinner) 
     { 
      entities.Dinners.AddObject(dinner); 
     } 

     public void Delete(Dinner dinner) 
     { 
      //List<RSVP> rsvps = dinner.RSVPs.ToList(); 

      //foreach (RSVP rsvp in dinner.RSVPs) 
      // entities.RSVPs.DeleteObject(rsvp); 

      entities.Dinners.DeleteObject(dinner); 
     } 

     public void Save() 
     { 
      entities.SaveChanges(); 
     } 
    } 
} 
+1

これをDBレベルで行うことはできません。削除ルールを外部キーをカスケードするように設定することはできません。 – Doggett

+0

OK。ありがとう。だから私は夕食のオブジェクトを削除する必要があります。 – xport

+1

はい。データベースによって子オブジェクトが削除されます。 Doggettあなたはこれを答えとして与えるべきだったはずです:)今私はそれを与えることはできません...あなたが最初に思いついたから...そしてどちらも私たちの評判を得ることはできません:) – basarat

答えて

1

あなたは夕食のオブジェクトを削除すると、データベースは自動的にすべての子レコードを削除します。

これはおそらくEFに反映されないため、すでにメモリ内にあるオブジェクトには削除済みとしてマークされません。

+0

だから、私はその問題を避けるために何をすべきですか? – xport

+0

あなたの現在の2つのテーブルでは、RSVPがディナーの外でアクセスされていないと仮定しても問題ありません。 – Doggett

+0

私の編集をご覧ください1.上記のようにリポジトリパターンを使用し、方法、あなたは上記の問題はまだ起こるか?または、クラスレベルの宣言ではなく、datacontextオブジェクトをローカル宣言に移動する必要がありますか? – xport

関連する問題