Zdravím, potřeboval bych poradit ohledně dědičnosti, možná trochu i návrhu, ale hlavně ohledně implementace. Mám poměrně jednoduchý model časové osy, která sestává z objektů dědících od TimelineEvent. TimelineEvent je abstraktní třída obsahující sdílené vlastnosti. Od této třídy dědí třeba ServiceTimelineEvent, PurchaseTimelineEvent, atp. Databázová tabulka TimelineEvents je vygenerovaná jako TPH, takže obsahuje všechny vlastnosti všech dědících tříd. V tom by problém nebyl. Databáze je OK (myslím si). Potřeboval bych poradit, jak napsat metody akce Create, aby vytvořily konkrétní třídu a ne tu base TimelineEvent. Při GET akci už předám konkrétní třídu (třeba ServiceTimelineEvent) jako Model, aby se vykreslilo odpovídající PartialView jako formulář - to funguje. Ale když ukládám, tak POST akce skončí chybou, že nebylo možné inicializovat abstraktní třídu TimelineEvent. Potřeboval bych, aby se neinicializoval nový objekt pro model, ale aby se použil ten model, který jsem předal v metodě GET.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TimelineEvent timelineEvent)
{
if (ModelState.IsValid)
{
timelineEvent.EventID = Guid.NewGuid();
db.TimelineEvents.Add(timelineEvent);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(timelineEvent);
}
Už jsem i přemýšlel, že dám celou dědičnost pryč a nechám tam jednu full tabulku, ze které budu jen vybírat některé atributy podle použitého PartialView, ale nechci to řešit starým způsobem. Moc děkuji za jakoukoliv radu. Vše se teprve učím, tak je to možná triviální záležitost. Google jsem už použil, ale když nevím jak přesně problém definovat, tak mi ani ten nepomůže. Díky, Tonda
|