Nun, nach einem Morgen des Schlagens mein Kopf gegen die Wand, werfe ich dies da draußen.EF6 Code erste zusammengesetzte primäre und fremde Schlüssel: Fremdschlüssel muss zugeordnet werden
Ich habe eine DB-Tabelle (Tabelle1) mit einer zusammengesetzten PK (Column1, Column2, Column3). (Spalte1, Spalte3) ist auch ein FK zu einer anderen Tabelle (Tabelle2).
Versuch-Code Ersten EF6 zu verwenden (6.1.3) und hier sind die Modelle:
[Table("DB.Table1")]
public partial class Object1
{
[Key]
[Column(Order=0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Column1 { get; set; }
[Key]
[Column(Order=1)]
public byte Column2 { get; set; }
[Key]
[Column(Order=2)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Column3 { get; set; }
public virtual Object2 SecondObject { get; set; }
}
[Table("DB.Table2")]
public partial class Object2
{
public Object2()
{
FirstObjects = new HashSet<Object1>();
}
[Key]
[Column(Order=0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Column1 { get; set; }
[Key]
[Column(Order=1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Column3 { get; set; }
public virtual ICollection<Object1> FirstObjects { get; set; }
}
Mein Modelbuilder (fliessend API):
modelBuilder.Entity<Object1>()
.HasRequired(o => o.SecondObject)
.WithMany()
.HasForeignKey(o => new { o.Column1, o.Column3 });
Vielleicht bin ich etwas fehle mit dem ICollection in Objekt2?
Ich erhalte eine Fehlermeldung, die besagt "Foreign-Key-Einschränkung aus Tabelle Object1 (Column1, Column3) zu Tabelle Object2 (Column1, Column3) :: Unzureichende Zuordnung: Fremdschlüssel muss einigen AssociationSet oder EntitySets zugeordnet werden Fremdschlüsselvereinigung auf der konzeptionellen Seite. "
Ich habe versucht:
modelBuilder.Entity<Object1>()
.HasRequired(o => o.SecondObject)
.WithMany(o => o.FirstObjects)
.HasForeignKey(o => new { o.Column1, o.Column3 });
ohne Erfolg. Ich habe einen "FirstObjects deklariert auf Objekt2 wurde mit widersprüchlichen Fremdschlüsseln konfiguriert" -Fehler.
Dies wurde CodeFirst aus einer vorhandenen Datenbank generiert.
Ivan, schätzen die Antwort. Wenn ich das versuchte, bekomme ich ein FirstObjects deklariert auf Object2 wurde konfiguriert mit widersprüchlichen Fremdschlüsseln "Fehler. – John
Nun, wie ich schon sagte, ich habe kopiert/eingefügt Ihren Code in meinem EF6.1.3 Test db Kontext und es funktioniert einfach. Die einzige Änderung, die ich gemacht habe, war "DB" aus Tabellennamen zu entfernen. SqlServer db BTW, weiß nicht, was ist Ihre db. Es gibt nichts mehr, was ich tun kann, viel Glück. –
Ivan, ich fand das Problem mit warum Die angegebene WithMany funktionierte nicht. Object1 FK wurde als (Column1, Column3) gesetzt. - Object2 FK wurde gesetzt (Column3, Column1). Vorrang ist wichtig :) Danke! – John