【2021-03-17】The entity type ‘Video‘ is part of a hierarchy, but does not have a discriminator value
阿新 • • 發佈:2021-03-19
問題
初始化資料庫失敗,錯誤部分原始碼如下:
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,包含兩項Movie和Tv。
但這個報錯卻還是說“沒有為Video表設定鑑別的依據”。
錯誤原因
即使我設計的程式只允許出現Movie和Tv這兩個子類的實體,不會出現父類Video,但仍應該為父類Video設定鑑別依據。
參考這個stackflow頁面末尾的一個回答
改正
1、先去enum VideoType加一個Video,雖然它可能永遠都用不到
2、再去DbContext為Video加一個鑑別HasValue(VideoType.Video)
modelBuilder.Entity<Video>().HasDiscriminator<VideoType>("Type")
.HasValue<Video>(VideoType.Video) // 加了這個
.HasValue< Movie>(VideoType.Movie)
.HasValue<Tv>(VideoType.Tv);
問題解決!