2012-01-25 14 views
30

Otrzymuję: BŁĄD: Niepoprawna nazwa kolumny "OrganizationStructure_ID".Entity Framework: Niepoprawna nazwa kolumny "OrganizationStructure_ID"

public OrganizationStructure() 
    { 
     ChildrenItems = new HashSet<OrganizationStructure>(); 
     InputDate = DateTime.Now; 
    } 

    public int ID { get; set; } 
    public string Name { get; set; } 

    public virtual int? ParentID { get; set; } 
    public int OrganizationID { get; set; } 
    public int OrganizationTypeID { get; set; } 
    public int OrganizationActivityID { get; set; } 
    public int OrganizationLocationID { get; set; } 

    public string AddRemark { get; set; } 
    public int UserId { get; set; } 
    public DateTime InputDate { get; set; } 
    public int? RemAttr { get; set; } 

    public virtual ICollection<OrganizationStructure> ChildrenItems { get; set; } 

INDEX DZIAŁANIE:

return View(_organizationStructureRepository.GetAll().ToList() 
      .Where(t => t.ParentID == null)); 
+0

to "OrganizationStructure" encja (z EF?) Jaki jest wyjątek? – gideon

+1

EF, wyjątek: Niepoprawna nazwa kolumny "OrganizationStructure_ID" –

+2

widoczna nazwa automatycznego klucza obcego o zmienionej nazwie z {entity} ID na {entity} _ID w pewnym momencie. Może EF5. –

Odpowiedz

37

To dlatego, że nie powiązać z FK własności nieruchomości nawigacji. Oczekuję, że ParentID powinien wskazywać rodzicowi OrganizationStructure, a ChildrenItems powinien wskazywać na dzieci OranizationStructures.

Jeśli model nie zawiera Parent właściwość nawigacji do rodzica OrganizationStructure należy użyć biegle-API powiedzieć EF że ParentID jest FK:

modelBuilder.Entity<OrganizationStructure>() 
      .HasMany(o => o.ChildrenItems) 
      .WithOptional() 
      .HasForeignKey(c => c.ParentID); 
+3

gdzie można umieścić ten kod? –

+3

@boomhauer: Zastąp metodę 'OnModelCreating' w swojej klasie pochodnej' DbContext' i umieść tam wszystkie mapowania. Inną opcją jest użycie klasy pochodnej 'EntityTypeConfiguration' i zarejestrowanie jej w' OnModelCreating'. –

+0

i foudn jak dodać attibute klucza obcego do modelu, który zajął się tym dla mnie. ale dzięki –

3

Co ja zorientowali się, kiedy masz kolekcji ICollection że odwołuje się do tabeli i nie ma kolumny, którą mógłby wymyślić, tworzy dla ciebie jedną próbę nawiązania połączenia między tabelami. Dzieje się tak szczególnie w przypadku ICollection i doprowadziło mnie do "batty", próbując to rozgryźć.

3

Miałem podobny problem, usuwając niechciane wejście publicznego wirtualnego ICollection, rozwiązałem go.

+0

Ty da man ... drażni mnie przez ostatnie 60 minut – Tosh

+0

To samo, to zabiło mnie, dopóki nie znalazłem tego – stillsmallvoice

1

Może to być również zadeklarowane pole odniesienia w elemencie podrzędnym jako proste pole, ale nie właściwość!

int ParentId //will be ignored; 

int ParentId {get; set;} // it'ok (but could be ignored 
         //if the parent entity name isn't 'Parent'); 

[ForeignKey("MyParentEntity")] 
int ParentId {get; set;} // is the best way (or use fluent-api)