foreign key conflict

0

Mam dwie bazdy SQL starą i nową. Przenosze dane ze starej do nowej. Na początku przeniosłem Company do tabeli Organizations.
I teraz chcę przenieść kontakty ale gdy robię coś takiego

      var mb = new ManagerHASPDataContext();
      var lb = new LyktaDataContext();
      var contacts = from p in mb.Company_Contacts
        where p.id_Company != null
        select new { p.id_Company};
      foreach (var contact in contacts)
      {

        Contact tempContact = new Contact();
        tempContact.IdOrganization = contact.id_Company;
      }

wylatuje błąd
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Contacts_Org
anizations". The conflict occurred in database "Lykta", table "dbo.Organizations
", column 'IdOrganization'.

A na pewno występuje idOrganizacji i jest poprawny bo gdy pytam się nowej bazy czy jest takie id i zwraca mi ono.
Później przypisuje to id i działa.

   foreach (var contact in contacts)
      {

        Contact tempContact = new Contact();
        tempContact.IdOrganization = contact.id_Company;


        var idOrganizations =
          (lb.Organizations.Where(q => q.IdOrganization == contact.id_Company).Select(q => q.IdOrganization)).Take(1);
        foreach (var idOrganization in idOrganizations)
        {
          tempContact.IdOrganization = idOrganization ;
        }
      }
1

przerób ten drugi Twój kod tak, a zobaczysz dlaczego się wywala:

tempContact.IdOrganization = lb.Organizations.Single(q => q.IdOrganization == contact.id_Company).idOrganization;

Tip: idOrganizations.Count() == 0. Na przyszłość pisz kod tak, żeby leciał wyjątek kiedy pojawia się nieprawidłowa sytuacja.

[edit]
Jest jeszcze ciekawiej: przypisujesz jako id organizacji identyfikator z tabeli Company_Contacts. Przecież idOrganization z tabeli Organizations to być może zupełnie co innego od id_Company z tabeli Company_Contacts! W połączeniu z Twoim późniejszym nieprawidłowym sprawdzaniem wartości nic dziwnego, że to się sypie.
Jeśli masz FK, to do pól tworzących FK przypisujesz wartości z tabel powiązanych tym FK, a nie jakieś z kosmosu wzięte identyfikatory z tabel z innego wymiaru. Ponadto jeśli możesz, to popraw to nazewnictwo, bo jest brzydkie i niekonsekwentne. Nie miesza się składni php (znaki podkreślenia - id_Company) z camel case (IdOrganization), a jeśli już stosujesz camel case, to używaj składni C# (OrganizationId), a nie java (idCompany).

0

OrganizationId i CompanyId to jest to samo tylko w starej bazie tak się nazywało a w nowej inaczej

OK już znalazłem błąd. Firma, która dała mi te bazy miała w starej bazie miała 6 wartości z niczym połączone

1 użytkowników online, w tym zalogowanych: 0, gości: 1