1. 程式人生 > 其它 >【2021-03-17】The entity type ‘Video‘ is part of a hierarchy, but does not have a discriminator value

【2021-03-17】The entity type ‘Video‘ is part of a hierarchy, but does not have a discriminator value

問題

初始化資料庫失敗,錯誤部分原始碼如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // Movie、Tv一起放在Video表中,以Type屬性區分;
    modelBuilder.Entity<Video>().HasDiscriminator<VideoType>("Type")
                                .HasValue<Movie>(VideoType.Movie)
                                .
HasValue<Tv>(VideoType.Tv); 省略......

我有一個父類Video(影視作品),兩個繼承自它的子類Movie(電影)和Tv(電視劇),所有的Video要麼是Movie要麼是Tv,我打算將他們都放在一個Video表中。
因此用HasDiscriminator設定鑑別器,鑑別器的鑑別物件是enum列舉型別VideoType,包含兩項MovieTv
但這個報錯卻還是說“沒有為Video表設定鑑別的依據”。

錯誤原因

即使我設計的程式只允許出現MovieTv這兩個子類的實體,不會出現父類Video,但仍應該為父類Video設定鑑別依據。
參考這個stackflow頁面末尾的一個回答

改正

1、先去enum VideoType加一個Video,雖然它可能永遠都用不到
在這裡插入圖片描述

2、再去DbContextVideo加一個鑑別HasValue(VideoType.Video)

modelBuilder.Entity<Video>().HasDiscriminator<VideoType>("Type")
                            .HasValue<Video>(VideoType.Video)     // 加了這個
                            .HasValue<
Movie>
(VideoType.Movie) .HasValue<Tv>(VideoType.Tv);

問題解決!