Witam!
W czasie pisania projektu napotkałem się na następujący problem. Otóż załóżmy że mamy interfejs **IOrderingItem **który przechowuje zmienną określającą kolejność elementów i ich ID, oraz dwie klasy dziedziczące: **Banner **i Page. Żeby nie duplikować tego samego kodu, napisałem funkcję która może jednocześnie usuwać obiekty obu tych klas.
///ItemType to enum mający dwa elementy: Page i Banner
public ActionResult DeleteItem(int id, Zaklad.Models.ItemType type)
{
using (Zaklad.Models.DatabaseContext db = new Zaklad.Models.DatabaseContext())
{
//Articles i Banners to obiekty typu DbSet
IEnumerable<Zaklad.Models.IOrderingItem> listOfItems = null;
if (type == Zaklad.Models.ItemType.Banner)
listOfItems = db.Banners;
else if (type == Zaklad.Models.ItemType.Page)
listOfItems = db.Articles;
if (listOfItems.Any(p => p.ID == id))
{
///???
db.SaveChanges();
}
}
return RedirectToAction(type.ToString() + "s");
}
W oznaczonym miejscu mam problem. Otóż, chcę tam usunąć element znajdujący się w IEnumerable. Jednak jest problem, ponieważ nie ma tam funkcji Remove, a użycie Except, Where itp. wymusi na mnie ponowne przypisanie do listOfItems, przez co Entity Framework straci do niej referencje - i w konsekwencji nic się z bazy danych nie usunie.
Ma ktoś pomysł w jaki sposób zaplanować funkcję tak, żeby działała poprawnie? Zmiana typu listOfItems na List oczywiście nic nie da bo przypisanie dwóch list różnych typów do siebie jest błędne.
AlfaLeporis
EDIT: Poprawione z List na DbSet