簡體   English   中英

視圖從抽象類型返回錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM