Wie würde ich die folgende Beziehung in Entity Framework 5 abbilden?Entity Framework 5 Code Erste selbstverweisende Beziehung
public class Item {
public int Id { get; set; }
public int? ParentItemId { get; set; }
public string Value { get; set; }
public Item ParentItem { get; set; }
public List<Item> ChildItems { get; set; }
}
Ich habe dies versucht:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasOptional(i => i.ParentItem)
.WithMany(i => i.ChildItems)
.HasForeignKey(i => i.ParentItemId);
}
und diese:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasMany(i => i.ChildItems)
.WithOptional(i => i.ParentItem)
.HasForeignKey(i => i.ParentItemId);
}
die beide Ergebnis in diesem Fehler:
Die Typen aller Eigenschaften in den abhängigen Die Rolle einer referenziellen Integritätsregel muss mit den entsprechenden Eigenschaftstypen in Pri identisch sein wichtige Rolle.
Wenn ich mit Datenbank-first-Mapping zu starten, hier ist das, was die erzeugte Einheit wie folgt aussieht:
public partial class Item
{
public Item()
{
this.ChildItems = new HashSet<Item>();
}
public int Id { get; set; }
public Nullable<int> ParentItemId { get; set; }
public string Value { get; set; }
public virtual ICollection<Item> ChildItems { get; set; }
public virtual Item ParentItem { get; set; }
}
Ich weiß, das wird funktionieren, wenn ich mit db-zum ersten Mal starten, ich muss nur wissen, wie man Definieren Sie die Beziehung zuerst in Code.
Ist 'Id' die Schlüsseleigenschaft? Oder haben Sie eine Schlüsselzuordnung (mit Fluent API?) Zu einer anderen Eigenschaft, zum Beispiel zu "Value"? – Slauma
Id ist die Primärschlüsseleigenschaft von Item. – user326502
"* Typen aller Eigenschaften in der abhängigen Rolle *" bedeutet die Typen der FK-Eigenschaft, die 'ParentItemId' ist und den Typ' int? 'Hat. "* entsprechende Eigenschaftstypen in der Principal Role *" bedeutet die Typen der PK-Eigenschaft, die "Id" ist und den Typ "int" hat. Sie sind die gleichen (Nullbarkeit ist egal). Die Ausnahme sagt jedoch, sie sind nicht. Die Ausnahme würde auftreten, wenn Sie zum Beispiel einen 'langen' (oder einen anderen Typ) für den PK und einen 'int? 'Für den FK hätten. Ziemlich merkwürdig ... – Slauma