-1

我有這個表&類:Ef中核TPH和關係問題

public abstract class ProductBase 
{ 
    public int Id { get; set; } 
} 
public class Product:ProductBase 
{ 

    public virtual ICollection<ProductType> Types { get; set; } = new HashSet<ProductType>(); 
    public virtual ICollection<OnlineStock> OnlineStocks { get; set; } = new HashSet<OnlineStock>(); 
} 
public abstract class ProductTypeBase 
{ 
    [Key] 
    public int Id { get; set; } 
    public int ProductId { get; set; } 
    public int Quantity{ get; set; } 
    [ForeignKey("ProductId")] 
    protected virtual Product Product { get; set; } 
} 
public class ProductType:ProductTypeBase 
{ 
    public new Product Product 
    { 
     get { return base.Product; } 
     set { base.Product = value; } 
    } 
} 
public class OnlineStock:ProductTypeBase 
{ 
    public new Product Product 
    { 
     get { return base.Product; } 
     set { base.Product = value; } 
    } 
    public virtual ICollection<ProductTypePicture> Pictures { get; set; } = new HashSet<ProductTypePicture>(); 

} 

當我要添加新的產品與producttype。

Context.Porduct.Add(new Product 
    { 
    Types=new List<ProductTypes> 
      { 
      new ProductTypes {Quantity=8} 
      } 
    }) 

ef錯誤:「無法投射'ProductType'類型的對象以鍵入'OnlineStock'。」

而且我有這個配置:

entityBuilder.Entity<Product>().HasMany(x=>x.Types).WithOne(x=>x.Product).HasForeignKey("ProductId"); 
     entityBuilder.Entity<Product>().HasMany(x=>x.OnlineStocks).WithOne(x=>x.Product).HasForeignKey("ProductId"); 
+2

也不要使用'new',使用'virtual'和'override'。 'new'只會隱藏成員,當您調用基礎類型的屬性時,您將獲得其他屬性。在開始更復雜的項目之前,最好先從初學者的書籍或繼承教程入手。而在你的情況下,'Product'屬性的新增和重寫都是不必要的 – Tseng

+1

這是**實際的**代碼還是隻是你輸入的問題?因爲它看起來與上面給出的代碼不匹配 – Tseng

+0

@Tseng實際代碼只是有更多的屬性,但導航屬性沒有改變。 –

回答

0

我解決了這個isssue臨時。

var NP=new Product(); 
    Context.Porduct.Add(NP); 
    Context.saveChanges(); 
    NP.Types.Add(new ProductTypes 
       { 
        Quantity=8 
       }); 
    Context.saveChanges();