5

Mam tabele bazy danych, które wyglądają tak:Entity Framework Relacja Issue na 0 ... 1 Stowarzyszenia

Schema Diagram

Task mogą być odwzorowane na Module, czy nie odwzorowanych na wszystko (0. ..1). Używam bazy danych Entity Framework - najpierw, a kiedy wygenerowałem model z bazy danych, jednostka Zadanie przeszła z Modułami jako kolekcja (0 lub więcej). Otworzyłem więc EDMX i zmieniłem właściwość nawigacji "Moduły" w Zadanie na 0 ... 1.

EDMX

Teraz, gdy próbuję skompilować, otrzymuję ten błąd:

Error 3003: Problem in mapping fragments starting at line 1241:Given the cardinality of Association End Member Task, it should be mapped to key columns of the table TaskModule. Either fix the mapping or change the multiplicity of this end.

ja nie rozumiem, co muszę zrobić, aby rozwiązać ten problem. Przyjrzałem się szczegółom asocjacji i nie widzę problemu. Wiem, że prawdopodobnie brakuje mi czegoś głupiego, ale całkowicie utknąłem. Właściwości asocjacji:

TaskModule Association

Visual Studio 2010 SP1, Entity Framework 4.3.1.0, SQL Server 2008 R2.

Odpowiedz

5

Jednym ze sposobów jest ponowne zdefiniowanie klucza podstawowego dla tabeli TaskModule. Zamiast klucza podstawowego (TaskId, ModuleName) musi to być po prostu (TaskId). Następnie wykonaj model aktualizacji z bazy danych i zmień ręcznie dowolne powiązania, które nie zostały pobrane z tej aktualizacji.

+0

nie ma sensu mieć tabeli TaskModule. ModuleName powinno być zerowym kluczem obcym w zadaniu –

+2

@ Raphaël Althaus Wydaje mi się, że jest to filozoficzna odpowiedź (tj. Narusza trzecią NF, ale jest dyskusyjna, czy powinieneś, czy nie). Czy możesz wskazać mi materiał, który obsługuje twoje POV? Spójrz na http://stackoverflow.com/questions/1723808/nullable-foreign-key-bad-practice – Dean

+0

To świetne pytanie, które łączysz, Dean. Sądzę, że jestem w mniejszości, może jestem w starej szkole, ale zerowe obce klucze naprawdę pocierają mnie w niewłaściwy sposób. Zmieniłem tabelę TaskModule zgodnie z sugestią i teraz wszystko działa dobrze. –

1

Dobrze schematu bazy danych nie jest poprawne z opisem dajesz:

TaskModule stół implikuje wiele do wielu relacji, a nie wiele do oneOrZero.

W edmx tabele relacji wielu do wielu nie są wyświetlane, ale nadal istnieją w bazie danych.

Powinieneś więc naprawić swoją bazę danych lub być zadowolony ze związku zaproponowanego przez EF!