Znalazłem wiele podobnych pytań tutaj, ale żaden z nich nie wydaje mi się pomóc w moim problemie. Atrybuty fluent api & nie pomogły. Baza danych została utworzona, ale po dodaniu do niej obiektu uległa awarii. Chcę mieć klasę, która ma własną kolekcję. Oto kod mam:Code First - Odwoływanie się jedna do wielu relacji
[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");
// });
}
}
Zapisy w bazie danych to tak:
ID | Name | ParentID
------------------------------------
1 | First | 0
2 | SubFirst | 1
3 | SubSecond | 1
4 | SubThird | 2
5 | SubFourth | 2
Więc jak mój obiekt powinien wyglądać po załadowaniu podmiotów jest następny:
- First
- SubFirst
- SubThird
- SubFourth
- SubSecond
Ale każdy przedmiot ma pustą kolekcję. Co powinienem zrobić, aby działał poprawnie?
Sprawdź to http://stackoverflow.com/questions/10421351/many-to-many-relationship-between-entities-of-same-type-in-mvc3/10422172#10422172 – Shyju
próbowałem już. Stworzył bazę danych, ale zawiesza się podczas dodawania nowego obiektu i wywoływania SaveChanges() – GaaRa
"* to rozbił *" nie jest tak naprawdę dobrym opisem problemu. 1) Czym dokładnie jest wyjątek? 2) Jakie zapytanie uruchomiłeś, gdy załadowałeś encje z pustymi kolekcjami? 3) Dlaczego masz 'ParentID' z' 0' w pierwszym rzędzie bazy danych? Narusza więzy referencyjne (nie ma wiersza z 'ID' 0). Czy masz na myśli 'NULL'? – Slauma