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);
}
EFでは、親ローを最初に参照している子ローを子ロークローンで削除して、それを削除すると効率的ですか?
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();
}
}
}
これをDBレベルで行うことはできません。削除ルールを外部キーをカスケードするように設定することはできません。 – Doggett
OK。ありがとう。だから私は夕食のオブジェクトを削除する必要があります。 – xport
はい。データベースによって子オブジェクトが削除されます。 Doggettあなたはこれを答えとして与えるべきだったはずです:)今私はそれを与えることはできません...あなたが最初に思いついたから...そしてどちらも私たちの評判を得ることはできません:) – basarat