![](/img/trans.png)
[英]Is it good practice to access concrete class type from abstract class method?
[英]View returns an error from an abstract type
我有一個抽象的音樂會類型和 3 個繼承自基礎的音樂會類
(RegularConcert, Party, ClassicalConcert)
,它們都映射到數據庫中它們自己的表,問題是我無法在單個視圖中獲取所有它們(可能是因為 Concert 是抽象的)並且我在我的 controller 中得到了一個 nullReferenceException。
楷模:
public abstract class Concert //base class
{
[Key]
public int ConcertId { get; set; }
[Display(Name = "Performer name")]
public string PerformerName { get; set; }
[Display(Name = "Ticket ammout")]
public int TicketsCount { get; set; }
[Display(Name = "Date of performance")]
public DateTime PerformanceDate { get; set; }
[Display(Name = "Location")]
public string Location { get; set; }
[Display(Name = "Event discription")]
public string Description { get; set; }
[Display(Name = "Image source")]
public string ImageURL { get; set; }
public List<Ticket> Tickets { get; set; }
}
public class ClassicalConcert : Concert
{
public VoiceTypes VoiceType { get; set; }
public string ConcertName { get; set; }
public string ComposersName { get; set; }
}
public class Party : Concert
{
public int AgeLimit { get; set; }
}
public class RegularConcert : Concert
{
}
Controller:
public class ConcertController : Controller
{
private readonly AppDbContext _context;
public ConcertController(AppDbContext context)
{
_context = context;
}
public async Task<IActionResult> Concerts()
{
return View(await _context.Concerts.ToListAsync());
}
}
數據庫上下文:
public class AppDbContext : CentaureaContext
{
public DbSet<Concert> Concerts { get; set; }
public DbSet<Ticket> Tickets { get; set; }
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Party>().ToTable("Parties");
modelBuilder.Entity<RegularConcert>().ToTable("RegularConcerts");
modelBuilder.Entity<ClassicalConcert>().ToTable("ClassicalConcerts");
base.OnModelCreating(modelBuilder);
}
}
我是否必須將具體類作為 DbSet 添加到 DbContext 中?
如果你的意思是你想從每個類中獲取 model 的值,我應該說它不是真的......為什么? 因為您應該使用 dbSet 將 inheritance 個類(RegularConcert、Party、ClassicalConcert)添加到數據庫中,而不需要將 Concert 添加到 dbSet 並在數據庫中創建表。 無論如何,您應該將另一個 model 添加到數據庫和創建方法以從中獲取值,然后在 controller 中調用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.