ATNEL tech-forum
https://forum.atnel.pl/

C# Entity Framework nazwa klucza obcego
https://forum.atnel.pl/topic16631.html
Strona 1 z 1

Autor:  perlon [ 26 paź 2016, o 12:54 ]
Tytuł:  C# Entity Framework nazwa klucza obcego

Witam.
Na początek zaznaczam, że jestem bardzo początkujący w temacie dlatego proszę o wyrozumiałość.
Piszę programik z EF6 Code First. Mam Dwie klasy DictionaryMaster i DictionarySlave. Jak się można domyśleć są powiązane relacją 1+M. Ppotrzebuję ustawić konkretną moją nazwę pola obsługującego relacje. O co dokładnie chodzi wyjaśniam w dalszej części.

Klasy wyglądają następująco
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Migracja tworzy mi następujący kod tworzący tabele
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak widać w tabeli 'dictionaryslave' niejako od zaplecza zostało stworzone pole 'DictionaryMaster_ID' jako klucz obcy do obsługi relacji 1+M. Widać również że jego nazwa nie pasuje do przyjętej konwencji nazewnictwa kolumn w tabeli. Chciałbym je ustawić na 'DS_DMID'. Próbowałem zdefiniować kolejną właściwość w klasie DictionarySlave ale nie udało mi się jej podpiąć jako ForeinKey
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Mam inny zestaw klas z relacją M+N i poradziłem sobie z podobnym tematem następująco :
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I w metodzie OnModelCreating coś takiego co załatwia mi zmianę nazwy tabeli jak również własne nazwy kolumn i gitara. Mniej więcej rozumiem co poniższe robi ale niestety nie potrafię poniższego zaimplementować w tabeli podrzędnej DictionarySlave w relacji 1+M.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  RafPe [ 26 paź 2016, o 13:00 ]
Tytuł:  Re: C# Entity Framework nazwa klucza obcego

Dawno temu bawilem sie EF - ale Tak na szybko rzuc okiem http://stackoverflow.com/a/11148834/2476347 uzywajac wlasnie tego podejscia powienenes osiagnac co potrzebujesz.

Daj znac czy cos pomoglo a jak nie to postaram sie cos wiecej zrobic jak bede pozniej w domu ;)

Autor:  perlon [ 26 paź 2016, o 14:44 ]
Tytuł:  Re: C# Entity Framework nazwa klucza obcego

Czytałem wcześniej podany przez ciebie wpis ale chyba go nie zrozumiałem. Przeczytałem więc go jeszcze dwa razy ;-) i załapałem. Problemem było myślowe przejście z modelu relacyjne na model obiektowy i co się tam dzieje. Dzięki zadziałało podejście 1.2
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no i migracja wygląda już tak jak chciałem
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak będzie szło pobieranie danych to się niebawem okaże. Na razie dzięki za podpowiedź.

Po walce z FluentAPI wyszło mi takie cość
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tylko jak zmapować DictionaryMasterId na kolumnę DS_DMID
Mogę zrobić tak ale to jest jakaś masakra.
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  perlon [ 27 paź 2016, o 09:36 ]
Tytuł:  Re: C# Entity Framework nazwa klucza obcego

Wczoraj było już chyba za późno na myślenie. Ostateczna wersja która spełnia wymagania (he, he sam sobie odpowiadam, ale może przyda się to innym czytającym):
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Daje to migrację dokłądnie taką o którą mi chodziło:

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To samo z FluentAPI. Przy okazji. Są jakieś argumenty za/przeciw FluentAPI? Czy może to tylko kwestia indywidualnych upodobań, bo klepania nieco więcej niż przy atrybutach.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  perlon [ 27 paź 2016, o 11:40 ]
Tytuł:  Re: C# Entity Framework nazwa klucza obcego

Zmagań ciąg dalszy. Wymyśliłem sobie, że w DictionarySlave para DictionaryMaster i DictSlaveKey będą stanowiły indeks unikalny. Czyli że w ramach klucza głównego klucze podrzędne muszą być unikalne natomiast klucze podrzędne mogą się powtarzać w różnych kluczach nadrzędnych i nie chodzi tu relację master to slave a o duble kluczy slave z różnymi DS_DMID.
Z atrybutami wygląda to tak:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i daje to taką migrację :
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czy da się index IX_DmWithKey zrobić we FluentAPI bez tworzenia dodatkowych pól w klasie DictionarySlave? Od biedy mógłby być to klucz główny. Choć jak widać powyżej nie musi.
Oczywiście poniższe nie działa
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/