2010-05-18 8 views
5

Przenoszę starą aplikację ASP do nowoczesnej wersji .NET, aby skrócić czasy programowania, których szukamy w platformie .NET 4.0 Entity. Wydaje się jednak, że w tym opracowaniu trafiliśmy na mur z cegły.Zagadnienie implementacji tabeli na hierarchię i dziedziczenia

Podana jest niewielka część naszej bazy danych: Tabela OBJECT zawiera listę samochodów i ich właściwości. Posiadamy również tabelę OBJECT_OPTIONS, która zawiera, dla danego samochodu w OBJECT, listę OPCJI, AKCESORIÓW i STANDARDOWEGO SPRZĘTU. Wszystkie te trzy typy mają te same pola i dlatego są przechowywane w tej samej tabeli. Kolumna ncopt_type służy do rozróżniania różnych list. Możliwe wartości to: "opt", "acc" i "sta". Tabela OBJECT_OPTIONS łączy się z OBJECT poprzez ncopt_obj_id, który reprezentuje unikalny samochód (obj_id) w tabeli OBJECT.

Naszym celem jest zapewnienie jednostce obiektu z 3 właściwości, które odwołują się do różnych list OBJECT_OPTIONS: - obiektu.W - akcesoria i usługi - nieruchomość STANDARDEQUIPMENT

Próbowaliśmy różnych samouczki i instruktaże dotyczące tabeli -per-hierarchy za pośrednictwem modelu dziedziczenia, ale nie udało się utworzyć modelu do zbudowania.

Technicznie co zrobiliśmy było:

  • Tworzenie jednostki OBIEKT
  • Tworzenie jednostki OBJECT_OPTIONS, sprawiają, że abstrakcyjne
  • Dodaj podmioty opcją, akcesoriów i STANDARD_EQUIP wszystkie wykorzystujące OBJECT_OPTIONS basetype
  • Dodaj warunki dla wszystkich trzy tabele na ncopt_type = '...'
  • Dodaj 3 właściwości nawigacyjne do OBJECT, wszystkie łączą do jednego z odziedziczonych elementów: OPCJE, AKCESORIA i STOISKO AARD_EQUIPMENT

Pęczek błędów pojawia się w tym układzie, ale kończy się z tego:

błędu 3032 Problem fragmenty mapowania począwszy od linii 250, 286: EntityTypes NCO.Model. OPTION, NCO.Model.ACCESSOIRE, NCO.Model.STANDAARD_EQUIP są mapowane na te same wiersze w tabeli OBJECT_OPTIES. Warunki odwzorowania można wykorzystać do rozróżnienia wierszy, do których są odwzorowywane te typy.

Na wszystkich trzech obiektach występuje jednak stan.

Nie znalazłem rozwiązania tego problemu i spędziłem na nim zbyt dużo czasu. Obecnie używamy metody obejścia, ale chcielibyśmy to naprawić, ponieważ ta sytuacja pojawi się jeszcze kilka razy pod koniec projektu.

Każda pomoc doceniona, jeśli potrzebujesz więcej informacji, napisz do mnie komentarz lub e-mail.

+1

Tak, ehm, nikt nie wie? –

+0

Wygląda na to, że nie. Mam ten sam problem, ... może to tylko my dwa! – Stimul8d

+0

Czy możesz dołączyć obraz odpowiednich tabel i odpowiednich elementów z edmx? - Pomogłoby to wyjaśnić, co próbujesz zrobić. Zostaw komentarz tutaj po edycji. –

Odpowiedz

1

nie jestem przekonany, można to zrobić w 100% z poziomu projektanta EF, ale można to zrobić tak:

  1. Tworzenie jednostki przedmiot (Mam przemianowany to „pojazd” dla przykładzie)
  2. Tworzenie jednostki OBJECT_OPTIONS, sprawiają, że abstrakcyjne
  3. Dodaj podmioty opcją, akcesoriów i STANDARD_EQUIP wszystko używając basetype OBJECT_OPTIONS
  4. Dodaj warunki do wszystkich trzech tabelach na ncopt_type = „...”

Następnie dodać we właściwościach chcesz za pomocą częściowej klasy dla Pojazd:

using System.Collections.Generic; 
using System.Linq; 

public partial class Vehicle 
{ 
    public IEnumerable<ACCESSORY> Accessories 
    { 
     get { return this.OBJECT_OPTIONS.OfType<ACCESSORY>(); } 
    } 

    public IEnumerable<OPTION> Options 
    { 
     get { return this.OBJECT_OPTIONS.OfType<OPTION>(); } 
    } 

    public IEnumerable<STANDARD_EQUIP> StandardEquipments 
    { 
     get { return this.OBJECT_OPTIONS.OfType<STANDARD_EQUIP>(); } 
    } 
} 
+0

Witam, Steve, porzuciliśmy tę metodę po długim czasie oczekiwania. Możemy go odzyskać w przyszłym wydaniu. Kiedy to zrobimy, spróbuję Twojego rozwiązania. Na razie wygląda na to, że twoje rozwiązanie może zadziałać, więc oznaczy je jako zaakceptowane. Dziękuję za poświęcenie czasu na odpowiedź. –

+0

Żadnych problemów :) –

Powiązane problemy