Я очень noob в C # и экосистеме .NET, извините, если вопрос глупый.
То, что я пытаюсь сделать, это иметь EventController
и ArticleController
, которые оба наследуются от PageController
, то же самоеприменяется для моделей: Event и Article наследуются от Page, используя одну и ту же последовательность идентификаторов.
Я хотел бы предоставить следующие URL-адреса (помимо прочего, но для упрощения):
- /Страницы (которые показывают статьи и статьи вместе)
- / Статьи (которые показывают только статьи)
- / События (которые показывают только события)
Вот упрощенныйКонцепция кода, который я пытаюсь выполнить:
using System;
using CoolSite.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using SharpBusiness.Data;
namespace CoolSite.Models
{
public abstract class Page
{
string Name { get; set; }
string Description { get; set; }
string Body { get; set; }
}
public class Article : Page
{
}
public class Event : Page
{
DateTime When { get; set; }
}
}
namespace CoolSite.Controllers
{
public class PageController<T> : Controller where T : Page
{
private readonly GeneralContext _db;
protected GeneralContext Db { get => _db; }
protected virtual DbSet<T> AllEntities { get => Db.Pages; }
public PageController(GeneralContext context) => _db = context;
[HttpGet]
public IActionResult List() => View(AllEntities);
}
public class ArticleController : PageController<Article>
{
public ArticleController(GeneralContext context) : base(context) { }
protected override DbSet<Article> AllEntities { get => Db.Articles; }
}
public class EventController : PageController<Event>
{
public EventController(GeneralContext context) : base(context) { }
protected override DbSet<Event> AllEntities { get => Db.Events; }
}
}
К сожалению, в этой строке:
protected virtual DbSet<T> AllEntities { get => Db.Pages; }
Я получаю эту ошибку:
Не удается неявно преобразовать тип «Microsoft.EntityFrameworkCore.DbSet» в «Microsoft.EntityFrameworkCore.DbSet» (CS0029)
Возможно ли сделать так, чтобы это работало?
Большое спасибо заваша помощь