-1

Ich habe diese Tabellen & Klasse:Ef Kern TPH & Beziehungen Ausgabe

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>(); 

} 

Wenn ich will neues Produkt mit Produkttyp hinzuzufügen.

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

ef Fehler: "Kann Objekt des Typs 'Product' zu gieße Typ 'OnlineStock'"

und ich habe auch diese config:

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

Verwenden Sie auch nicht 'new', verwenden' virtual' und 'override'. 'new' blendet nur das Mitglied aus, wenn Sie die Eigenschaft auf dem Basistyp aufrufen, erhalten Sie die andere Eigenschaft. Sie sollten gut mit einem Anfängerbuch oder Tutorial zur Vererbung beginnen, bevor Sie komplexere Projekte starten. Und in Ihrem Fall ist sowohl das Neuschreiben als auch das Überschreiben der Produkteigenschaft unnötig. – Tseng

+1

Ist das der ** tatsächliche ** Code oder nur etwas, das Sie für die Frage eingegeben haben? Ursache Es scheint, dass die Ausnahme nicht den angegebenen Code über – Tseng

+0

@Tseng Actual Code Just mehr Eigenschaft. Aber Navigationseigenschaften nicht ändern. –

Antwort

0

Ich löste dieses isssue Temporary.

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