Come mappare la seguente relazione in Entity Framework 5?Entity Framework 5 Codice prima relazione autoreferenziale
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; }
}
Ho provato questo:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasOptional(i => i.ParentItem)
.WithMany(i => i.ChildItems)
.HasForeignKey(i => i.ParentItemId);
}
e questo:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasMany(i => i.ChildItems)
.WithOptional(i => i.ParentItem)
.HasForeignKey(i => i.ParentItemId);
}
che sia risultato in questo errore:
I tipi di tutte le proprietà del dipendente Il ruolo di un vincolo referenziale deve essere lo stesso dei tipi di proprietà corrispondenti nel Pri ruolo centrale.
Se inizio con la mappatura di database-prima, qui è quello che l'entità generato assomiglia:
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; }
}
So che questo funzionerà se comincio con db-prima, ho solo bisogno di sapere come definire la relazione in code-first.
è 'Id' la proprietà chiave? O hai una mappatura delle chiavi (con Fluent API?) Su un'altra proprietà, ad esempio su 'Value'? – Slauma
Id è la proprietà chiave primaria dell'articolo. – user326502
"* tipi di tutte le proprietà nel ruolo dipendente *" indica i tipi della proprietà FK che è 'ParentItemId' e ha tipo' int? '. "* corrispondenti tipi di proprietà nel ruolo principale *" indica i tipi della proprietà PK che è 'Id' e ha tipo' int'. Sono uguali (il nullability non ha importanza). Tuttavia, l'eccezione dice che non lo sono. L'eccezione si verificherebbe se tu avessi per esempio un 'long' (o qualsiasi altro tipo) per il PK e un' int? 'Per l'FK. Piuttosto strano ... – Slauma