C# LINQ rekord eltávolítása foreign constraint jelenléte esetén?
Van egy receptalkalmazás, amiből törölni kellene tudni recepteket. Egy recept úgy áll össze, hogy fogásID idegen kulcsként, mennyiség, mennyiség mértékegységID idegen kulcsként és nyersanyagID idegen kulcsként. Ha szeretnék törölni egy receptet, azt hogy tudom megtenni. Arra gondoltam, hogy végigiterálok az összes olyan rekordon, ami a törlendő fogásID-kat tartalmazza, majd minden értéket null-ra állítok (adatbázisban felvehet minden null értéket). A problémám, hogy mégsem hagyja null-ra állítani kódból, mivel az Anonymous Type read-only. Hogy tudnám ezt valahogy megoldani? A kód, amire jutottam:
Fogasok fogás = (Fogasok)újÉtelekListBox.SelectedItem;
var tf = (from r in db.Receptek
join f in db.Fogasok on r.FogasID equals f.FogasID
join me in db.MennyisegEgysegek on r.MennyisegEgysegID equals me.MennyisegEgysegID
join ny in db.Alapanyagok on r.NyersanyagID equals ny.AlapanyagID
where f.FogasID == fogás.FogasID
select new { me.MennyisegEgysegID, r.Mennyiseg, ny.AlapanyagID }).ToList();
foreach (var item in tf)
{
item.AlapanyagID = null;
item.Mennyiseg = null;
item.MennyisegEgysegID = null;
}
db.Fogasok.DeleteObject(fogás);
db.SaveChanges();
Na, sikerült. Ha valakinek, valami hasonló kell majd egyszer:
Fogasok fogás = (Fogasok)újÉtelekListBox.SelectedItem;
int receptekSzáma = (from r in db.Receptek
where r.FogasID == fogás.FogasID
select r.ReceptID).Count();
if (receptekSzáma == 0)
{
db.Fogasok.DeleteObject(fogás);
db.SaveChanges();
}
else
{
while (receptekSzáma > 0)
{
Receptek rp = ((ObjectQuery<Receptek>)db.Receptek)
.Include("Fogasok")
.Include("Alapanyagok")
.Include("MennyisegEgysegek")
.FirstOrDefault(i => i.FogasID == fogás.FogasID);
if (rp == null)
{
db.Fogasok.DeleteObject(fogás);
db.SaveChanges();
return;
}
else
{
db.Receptek.DeleteObject(rp);
db.SaveChanges();
}
}
moha for president!
csak a gazdinfó <3
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!