Entity Framework 5 Code Première relation auto-référencée
Comment aurais-je carte la relation suivante dans l'Entity Framework 5?
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; }
}
J'ai essayé ceci:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasOptional(i => i.ParentItem)
.WithMany(i => i.ChildItems)
.HasForeignKey(i => i.ParentItemId);
}
et ce:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasMany(i => i.ChildItems)
.WithOptional(i => i.ParentItem)
.HasForeignKey(i => i.ParentItemId);
}
qui la fois le résultat de cette erreur:
Les types de toutes les propriétés dans le Rôle Dépendants d'un référentiel de contrainte doit être le même que le type de propriété dans le Rôle Principal.
Si je commence avec la base de données de la première cartographie, voici ce que l'généré entité ressemble:
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; }
}
Je sais que cela ne fonctionnera que si je commence avec db-tout d'abord, j'ai juste besoin de savoir comment définir la relation dans le code-première.
source d'informationauteur user326502
Vous devez vous connecter pour publier un commentaire.
L'exception des moyens suivants:
ParentItemId
et a le typeint?
dans votre modèleId
et a le typeint
dans votre modèleIls sont les mêmes (possibilité de valeur null n'a pas d'importance). Toutefois, l'exception dit, ils ne le sont pas.
L'exception ne devrait normalement se produire si les types ne correspondent pas, par exemple, si vous avez eu une
long
(ou de tout autre type) pour le PK et unint?
pour la FK.Dans le premier code, changement de votre classe d'entité comme ceci:
Écrire le code suivant à votre fichier de contexte:
Pense que cela devrait fonctionner.
Pourquoi ne pas essayer ceci:
Et dans votre DataContex Classe:
Espérons que ce travail.
Il y a aussi un bon article ici:
Comment faire pour Configurer un Auto Entité de référence dans le Premier Code,
http://blogs.microsoft.co.il/gilf/2011/06/03/how-to-configure-a-self-referencing-entity-in-code-first/
Essayez d'utiliser le mapKey façon de faire plutôt que d'utiliser HasForeignKey. Comme