-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");
也不要使用'new',使用'virtual'和'override'。 'new'只會隱藏成員,當您調用基礎類型的屬性時,您將獲得其他屬性。在開始更復雜的項目之前,最好先從初學者的書籍或繼承教程入手。而在你的情況下,'Product'屬性的新增和重寫都是不必要的 – Tseng
這是**實際的**代碼還是隻是你輸入的問題?因爲它看起來與上面給出的代碼不匹配 – Tseng
@Tseng實際代碼只是有更多的屬性,但導航屬性沒有改變。 –