Ho trovato molte domande simili qui, ma nessuno di loro sembra aiutarmi con il mio problema. Gli attributi di Fluent api & non hanno aiutato. Il database è stato creato, ma quando si aggiunge un oggetto, si è arrestato in modo anomalo. Voglio avere una classe che abbia una collezione di se stessa. Ecco il codice che ho:Code First - Self-referencing one to many relation
[Table("UObjects")]
public class UObject
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Browsable(false)]
public long ID { get; set; }
public string Name { get; set; }
[Browsable(false)]
public long? ParentID { get; set; }
public virtual UObject UParent { get; set; }
[Browsable(false)]
public virtual ICollection<UObject> UObjects { get; set; }
}
public class MyContext : DbContext
{
public DbSet<UObject> UObjects { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// This fluent API didn't help
//modelBuilder.Entity<UObject>()
// .HasOptional(u => u.UParent)
// .WithMany(u => u.UObjects)
// .HasForeignKey(u => u.ParentID);
//modelBuilder.Entity<UObject>()
// .HasOptional(u => u.UParent)
// .WithMany(u => u.UObjects)
// .Map(c =>
// {
// c.MapKey("ParentID");
// c.ToTable("UObjects");
// });
}
}
Records nel database sono come questo:
ID | Name | ParentID
------------------------------------
1 | First | 0
2 | SubFirst | 1
3 | SubSecond | 1
4 | SubThird | 2
5 | SubFourth | 2
Così come il mio oggetto dovrebbe apparire dopo aver caricato le entità è prossimo:
- First
- SubFirst
- SubThird
- SubFourth
- SubSecond
Ma ogni oggetto ha una collezione vuota. Cosa devo fare per farlo funzionare correttamente?
controllare questo http://stackoverflow.com/questions/10421351/many-to-many-relationship-between-entities-of-same-type-in-mvc3/10422172#10422172 – Shyju
provato già questo. Ha creato il database ma si blocca quando si aggiunge un nuovo oggetto e si chiama SaveChanges() – GaaRa
"* si blocca *" non è proprio una descrizione del problema. 1) Qual è esattamente l'eccezione? 2) Quale query hai eseguito quando hai caricato le entità con raccolte vuote? 3) Perché hai un 'ParentID' di' 0' nella prima riga del database? Viola un vincolo referenziale (non c'è riga con 'ID' 0). O vuoi dire 'NULL'? – Slauma