private void CreateUpdateOrDeleteTable(Table table, CreateUpdateOrDeleteOperation op) { switch (op) { case CreateUpdateOrDeleteOperation.Create: table.Location = db.Locations.Find(table.LocationId); db.Tables.Add(table); break; case CreateUpdateOrDeleteOperation.Update: // 1. be kell mutatni a modellt az adatbázisnak db.Tables.Attach(table); // 2. be kell tölteni a hozzátartozó eredeti teremadatokat db.Entry(table) // kérem az EF adatbázis elérő részét .Reference(x => x.Location) // kérem a csatlakozó táblák közül a Location-t .Load(); // onnan betöltöm az adazokat // 3. módosítani kell az új teremadatot table.Location = db.Locations.Find(table.LocationId); // 4. jelezni kell, hogy változott, így a többi érték (Name, stb.) változást is figyelembe veszi az EF db.Entry(table).State = EntityState.Modified; break; case CreateUpdateOrDeleteOperation.Delete: db.Tables.Remove(table); break; default: throw new Exception($"Erre a műveletre nam vagyunk felkészítve: {op}"); break; } }
private void CreateUpdateOrDeleteMenuItem(MenuItem menuItem, CreateUpdateOrDeleteOperation op) { switch (op) { case CreateUpdateOrDeleteOperation.Create: var categoryCreate = db.Categories.Find(menuItem.CategoryId); //todo: ezt a részt vissza integrálni //if (category == null) //{ //Ha nincs ilyen kategóriám, akkor nem tudok mit tenni, // //visszaküldöm az adatokat módosításra // LoadAssignableCategories(menuItem); // return View(menuItem); //} db.MenuItems.Attach(menuItem); //mivel ez egy vadonatúj elem, ami még nem volt adatbázisban, //ezért nem tudunk property-t tölteni, mert nincs honnan. //ezért az Edit-tel ellentétben ez a sor nem kell. //db.Entry(menuItem).Reference(x => x.Category).Load(); menuItem.Category = categoryCreate; return; case CreateUpdateOrDeleteOperation.Update: var categoryUpdate = db.Categories.Find(menuItem.CategoryId); //todo: ezt a részt vissza kell integrálni //if (category == null) //{ //Ha nincs ilyen kategóriám, akkor nem tudok mit tenni, // //visszaküldöm az adatokat módosításra // LoadAssignableCategories(menuItem); // return View(menuItem); //} //a html form-ról jövő adatokat "bemutatjuk" az adatbázisnak db.MenuItems.Attach(menuItem); //az adatbázissal kapcsolatos dolgok eléréséhez kell az Entry var entry = db.Entry(menuItem); //ennek segítségével betöltjük a Category tábla adatait a menuItem.Category property-be entry.Reference(x => x.Category).Load(); //majd felülírjuk azzal, ami bejött a HTML form-on menuItem.Category = categoryUpdate; entry.State = EntityState.Modified; return; case CreateUpdateOrDeleteOperation.Delete: db.MenuItems.Remove(menuItem); return; default: throw new Exception($"Erre nem vagyunk felkészülve: {op}"); } }
private void CreateUpdateOrDeleteMenuItem(MenuItem menuItem, CreateUpdateOrDeleteOperation op) { switch (op) { case CreateUpdateOrDeleteOperation.Create: var categoryCreate = db.Categories.Find(menuItem.CategoryId); //if (category == null) //{//Ha nincs ilyen kategoria, akkor nem lehet mit tenni, visszakuldom az adatokat modositasra // LoadAssignableCategories(menuItem); // return View(menuItem); //} db.MenuItems.Attach(menuItem); //Mivel ez egy teljesen uj elem, ami meg nem volt az adatbazisban (ellentetben az Edit-tel), //ezert nem tudunk property-t tolteni, mert meg nincs honnan. //Ezert ebben az estben az alabbi sor nem kell (es InvalidOperationsException-t is dobna). //db.Entry(menuItem).Reference(x => x.Category).Load(); menuItem.Category = categoryCreate; return; case CreateUpdateOrDeleteOperation.Update: var categoryUpdate = db.Categories.Find(menuItem.CategoryId); //if (category == null) //{//Ha nincs ilyen kategoria, akkor nem lehet mit tenni, visszakuldom az adatokat modositasra // LoadAssignableCategories(menuItem); // return View(menuItem); //} //A html formrol jovo adatokat bemutatjuk az adatbazisnak db.MenuItems.Attach(menuItem); //az adatbazissal kapcsolatos dolgok eleresehez kell az entry var entry = db.Entry(menuItem); //ennek segitsegevel betoltjuk a Category tabla adatait a menuItem.Category property-be entry.Reference(x => x.Category).Load(); //majd felulirjuk azzal, ami bejott a html formon menuItem.Category = categoryUpdate; entry.State = EntityState.Modified; //Csak, ha ez be van allitva, akkor menti a modositasokat az EF return; case CreateUpdateOrDeleteOperation.Delete: db.MenuItems.Remove(menuItem); return; default: throw new Exception($"Erre nem vagyunk felkeszulve: {op}"); } }
private void CreateUpdateOrDeleteTable(Table table, CreateUpdateOrDeleteOperation op) { switch (op) { case CreateUpdateOrDeleteOperation.Create: //a kivalasztott termet is be kell allitani table.Location = db.Locations.Find(table.LocationId); //table.LocationId: A lenyilo kivalasztott erteke db.Tables.Add(table); break; case CreateUpdateOrDeleteOperation.Update: //a kivalasztott termet is be kell allitani //1. Be kell mutatni a modellt az adatbazisnak db.Tables.Attach(table); //2. Be kell tolteni a hozzatartozo eredeti teremadatokat db.Entry(table) //kerem az EF adatbazist elero reszet .Reference(x => x.Location) //kerem a csatlakozo tabalk kozul a Location-t .Load(); //Onnan betoltom az adatokat //3. Modositani kell az uj terem adatot a lenyilo mezobol table.Location = db.Locations.Find(table.LocationId); //4. Jelezni kell, hogy valtozott, igy a tobbi ertek (Name, stb.) valtozast is figyelembe veszi az EF db.Entry(table).State = EntityState.Modified; break; case CreateUpdateOrDeleteOperation.Delete: db.Tables.Remove(table); break; default: throw new Exception($"Erre a muveletre nem vagyunk felkeszulve: {op}"); } }