[英]ASP.Net Core : Generic Controller & Model Inheritance
我在 C# 和 .NET 生态系统中非常菜鸟,如果问题愚蠢,对不起。
我想要做的是拥有一个EventController
和ArticleController
,它们都继承自PageController
,同样适用于模型: Event 和 Article 继承自 Page,共享相同的 ID 序列。
我想提供这些网址(除其他外,但为了简化):
这是我要完成的代码的简化概念:
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)
有可能使它起作用吗?
非常感谢您的帮助
您正在寻找Set<T>
。 虽然,您不应该在 ivar 中坚持这一点,主要是因为没有意义。 当您想查询时,只需使用_db.Set<T>()
。 添加/删除实体时,您可以只使用_db.Add(entity)
、 _db.Remove(entity)
等。EF Core 将为该实体类型在适当的DbSet
上执行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.