Mam trudny problem, w którym chciałbym użyć refleksji na temat mapowania mojego Entity Framework, aby znaleźć wszystkie klucze obce odnoszące się do tabeli, i chcę, aby nazwy kolumn są to klucze obce.Entity Framework - Refleksje na temat zagranicznych kluczy i relacji/stowarzyszeń
Zgodnie z another post on SO mogę łatwo znaleźć właściwości nawigacji na stole za pomocą odbicia. Ale to nie daje mi nazwy właściwości lub kolumny, która zawiera wartość klucza obcego.
Powodem, dla którego próbuję to zrobić, jest duża liczba tabel (prawie 40), które odnoszą się do jednej tabeli elementów. Powiedzmy, że użytkownik wprowadza nową wartość w tabeli elementów o nazwie "Andew", a później administrator zauważy, że jest to właściwie tylko literówka dla już istniejącego elementu "Andrew". Teraz chcę znaleźć wszystkie odniesienia do "Andew" i zmienić te odniesienia do "Andrew". Wolałbym zrobić to sprawnie, więc użycie właściwości nawigacji wstecznej byłoby zbyt wolne, ponieważ trzeba wczytać wartości przed ich modyfikacją. Co chciałbym zrobić, to móc odzwierciedlić listę tabel i kolumn, a następnie wydać polecenia aktualizacji bezpośrednio do bazy danych. Byłoby to wyglądać mniej więcej tak:
var command = String.Format("UPDATE [{0}] SET [{1}] = {{1}} WHERE [{1}] = {{0}}; ", fk.FromTableName, fk.FromColumnName);
dataContext.ExecuteStoreCommand(command, new Object[] { oldID, newID });
w LINQ to SQL to było rzeczywiście bardzo proste ... 20 linii refleksji na LINQ auto-wygenerowany kod i skończyłam, ale przełącza się EF niedawno i ja nie może znaleźć nazw kolumn klucza obcego przez EF.
Uproszczony przykład tego, czego szukam: jeśli mam obiekt o nazwie Pracownik z właściwością nawigacji o nazwie Menedżer i klucz obcy z MenedżeraID, to chcę wiedzieć, że Menedżer jest moją właściwością nawigacji i bazą przechowywania jest właściwością ManagerID. Chcę to zrobić ściśle poprzez odbicie lub metadane, dzięki czemu mogę zbudować od niego zapytanie dynmaiczne.
Masz głos w dół, więc zakładam, że nie jestem jedynym, który ma problem z rozumieniem, o co ci chodzi. możesz po prostu zrobić 'employee.managerId' lub' employee.manager.id'? musisz wiedzieć, co to jest konwencja, twój DBA nie może po prostu zmienić DB bez wpływu na twój projekt w inny sposób. – Eonasdan
@Eonasdan - dzięki. Zastanawiałem się, dlaczego mnie nie doceniono. Przepisałem całkowicie, aby miejmy nadzieję, uczynić to znacznie bardziej przejrzystym. Niestety teraz jest znacznie dłuższy i starałem się go krótko. – pbarranis