Witajcie drodzy przyjaciele.
Mam klase bazową BookModel i klasy pochodne MovieModel i EbookModel.
W bazie danych SQL mam jedną tabelkę (TPH)
Teraz chciałbym przywołać wszystkie rekordy jakie mam w bazie danych.
Generalnie muszę stworzyć stronę na której przedstawie wszystkie rekordy z bazy danych, czyli wszystkie booki, movie i ebooki. Zamiast zwykłych klas zrobiłem jedną bazową i 2 subklasy bo tak mi doradzono że będzie najprościej. W htmlcs model ma typ MovieModel bo inaczej w View niemogłem przypisać właściwości z dziedzicznych klas w loopie.
Czemu te właściwości są null? I co ważniejsze, jak mogę najprościej wyświetlić na stronce view wszystkie rekordy z bazy danych? (Zdjecie ponizej)
Klasa bazowa:
public class BookModel
{
public int ID { get; set; }
public string Type { get; set; }
public string Tittle { get; set; }
public string? Author { get; set; }
public string? Genre { get; set; }
public int? Pages { get; set; }
public bool Lent { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true)]
public DateTime? LoanDateTimeStart { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true)]
public DateTime? LoanDateTimeEnd { get; set; }
[ForeignKey(nameof(User))]
public int? UserId { get; set; }
public UserModel? User { get; set; }
}
klasy pochodne :
public class MovieModel : BookModel
{
[Column("Length(min)")]
public int? Length { get; set; }
public string? Director { get; set; }
}
public class EBookModel : BookModel
{
}
htmlcs :
public class SearchModel : PageModel
{
[BindProperty(SupportsGet = true)] public string? SearchKey { get; set; } = string.Empty;
public List<MovieModel> AllObjects { get; set; } = new List<MovieModel>();
public ApiManager? apiManager { get; set; }
public async Task OnGet()
{
if (string.IsNullOrEmpty(SearchKey))
{
// return all
apiManager = new();
AllObjects = await apiManager.GetAllObjects();
}
else
{
// var allObjects = await apiManager.ReturnAllObjects();
// Objects = allObjects.Where(x => x.Name.Contains(SearchKey, StringComparison.CurrentCultureIgnoreCase)).ToList();
}
}
}
Baza danych :