Obligatorisch "Erste Frage, tut mir leid, wenn ich etwas versaut habe". Ich hoffe nur, dass jemand helfen kann.Entity Framework - Fremdschlüssel Annotation ignoriert das falsche Objekt
Entity-Framework 6, .net 4.5.
Ich habe ein Produkt. Ein Produkt wird möglicherweise aus einer bestimmten Anzahl anderer Produkte hergestellt. Daher habe ich eine ProductUsed-Klasse mit zwei Produkt-IDs erstellt, eine namens ParentProductID und eine PreProductID mit einer Anmerkung zu einem virtuellen Produkt für den Fremdschlüssel, der auf die "PreProductID" verweist. . Jedes Mal, wenn ich darauf zugreife, wird das Produkt für die ParentProductID geladen.
public class Product
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ProductID { get; set; }
[Required]
[Display(Name = "Name")]
public string ProductName { get; set; }
//trimmed for brevity
[ForeignKey("ParentProductID")]
public virtual List<ProductUsed> ProductsUsed { get; set; }
}
public class ProductUsed
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ProductUsedID { get; set; }
[Display(Name = "Pre Product")]
[Required]
public int PreProductID { get; set; }
[Display(Name = "Pre Product")]
[ForeignKey("PreProductID")]
public virtual Product PreProduct { get; set; }
[Display(Name = "Product")]
[Required]
public int ParentProductID { get; set; }
public int Quantity { get; set; }
}
Das Speichern erfolgt durch Erstellen des Objekts, Hinzufügen der Produkte ProductsUsed Collection und Speichern der Änderungen. Die Datenbank enthält alle Felder an den richtigen Stellen.
Alles, was ich gelesen habe, sagt, dass dies einfach sein sollte, es scheint nur die Anmerkung zu ignorieren. Oder (was wahrscheinlicher ist) Ich verstehe nicht, wie diese Annotation funktionieren soll.
Irgendwelche Zeiger?
die ForeignKey auf Erzeuger führen zu einer Ausnahme Entfernen ungültigen Spaltennamen geworfen ‚Product_ProductID‘ Mit dem ForeignKey es tut es die richtigen ProductUsed Objekte, wenn ich darauf zugreifen, es ist nur, dass das Produkt, das es war deutet in die falsche Richtung. –
Versuchen Sie, ParentProduct in Product und ParentProductId in ProductId umzubenennen. – Nalipu
Wenn die Umbenennung nicht funktioniert, können Sie das fluent api from entity framework verwenden. Siehe Beispiel [hier] (http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx) – Nalipu