Otrzymuję ten błąd podczas zapisu do bazy danych:
Właściwość zależna w ReferentialConstraint jest mapowana na kolumnę wygenerowaną przez sklep. Kolumna: „PaymentId”.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
Schemat to:
c#
sql-server-2008
linq-to-sql
entity-framework-4
Walijski król
źródło
źródło
(e as System.Data.Entity.Infrastructure.DbUpdateException).Entries
), Możesz zobaczyć, która tabela zawiera klucz podstawowy, do którego się odwołujesz.Ten błąd mówi, że używasz nieobsługiwanej relacji lub masz błąd w mapowaniu. Twój kod najprawdopodobniej nie ma żadnego związku z błędem.
Błąd oznacza, że istnieje relacja między jednostkami, w których właściwość klucza obcego w jednostce zależnej jest zdefiniowana jako wygenerowana w magazynie. Właściwości wygenerowane przez sklep są wypełniane w bazie danych. EF nie obsługuje właściwości wygenerowanych przez magazyn jako kluczy obcych (a także obliczonych właściwości w kluczach podstawowych).
źródło
PaymentID
i zajmij się nią.Miałem ten sam problem. Na podstawie udzielonych tutaj odpowiedzi udało mi się go wyśledzić i rozwiązać, ale miałem dziwny problem opisany poniżej - może to komuś pomóc w przyszłości.
W moich tabelach zależnych kolumny klucza obcego zostały ustawione na StoreGeneratedPattern = "Identity". Musiałem zmienić to na „Brak”. Niestety, wykonanie tego wewnątrz projektanta w ogóle nie działało.
Zajrzałem do wygenerowanego przez projektanta XML (SSDL) i te właściwości nadal tam były, więc usunąłem je ręcznie. Musiałem też naprawić kolumny w bazie danych (usunąć Identity (1,1) z CREATE TABLE SQL)
Potem problem zniknął.
źródło
Miałem ten sam problem i po pewnym zagłębieniu się w projekt tabeli na serwerze sql stwierdziłem, że omyłkowo ustawiłem klucz podstawowy tabeli również jako klucz obcy.
Na tym obrazku widać, że JobID jest kluczem podstawowym tabeli, ale także błędnie kluczem obcym.
źródło
Mój problem był spowodowany nadmiarowym zdefiniowaniem klucza podstawowego w konfiguracji.
Usuń tę linię
Przykład http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx
To wystarczy, aby zdefiniować związek
źródło
Ponownie sprawdź związek między płatnością a innymi tabelami / podmiotami. W tym te, które nie powinny zawierać PaymentId, ponieważ tam najprawdopodobniej ukrywa się problem.
Podczas tworzenia kluczy obcych w SQL Server Management Studio klucz podstawowy jest domyślny i ten domyślny jest przywracany po zmianie tabeli nadrzędnej, dlatego należy uważać, aby zmienić wartości we właściwej kolejności w oknie „Tabele i kolumny”.
Ponadto po naprawieniu problematycznej relacji istnieje duża szansa, że zwykłe „Odśwież” w modelu nie usunie poprawnie błędnej relacji z modelu i wystąpi ten sam błąd nawet po „ naprawieniu ”, więc zrób to sam w modelu przed wykonaniem odświeżenia. (Przekonałem się o tym na własnej skórze.)
źródło
Jeśli sprawdziłeś swoje relacje i jesteś tam dobry.
Usuń tabelę w edmx, a następnie zaktualizuj z bazy danych. Pozwoli to zaoszczędzić na ręcznej aktualizacji.
źródło
Dla mnie był to źle umieszczony klucz obcy w tabeli, ale nawet po przeróbce tabeli, aby go naprawić, nadal nie działał. Musisz zaktualizować pliki EDMX (a nie wystarczy „odświeżyć” tabelę z modelu, musisz usunąć i ponownie dodać tabelę w modelu).
źródło
Oprócz zaakceptowanej odpowiedzi, jeśli używasz generatora EF Reverse POCO lub innego narzędzia, które generuje twoje POCO, upewnij się, że je regenerujesz !
źródło
W moim przypadku problem wynikał z dwukierunkowej relacji 1-1:
Musiałem po prostu usunąć jeden z dwóch kluczy obcych (zresztą nie jest to konieczne).
źródło
W moim przypadku po prostu nie miałem poprawnie ustawionych uprawnień do bazy danych. Miałem tylko do odczytu zestaw, a struktura Entity dawała mi błąd ReferentialConstraint, który mnie wyrzucił. Dodano dodatkowe uprawnienia do zapisu i wszystko było dobrze.
źródło
W moim przypadku miałem właściwość wygenerowaną w bazie danych i właściwość nawigacji ForeignKey skonfigurowaną tak, aby odwoływała się do powiązanej tabeli 1 do 1.
Nie było to coś, co mogłem usunąć, musiałem mieć możliwość ustawienia klucza podstawowego jednostki jako generowanej w bazie danych ORAZ musiałem mieć możliwość odniesienia się do tabeli 1 do 1 jako właściwości nawigacji.
Nie jestem pewien, czy to jest to samo dla innych, ale ten problem pojawiał się tylko podczas tworzenia nowej encji, czytanie lub edytowanie istniejących jednostek nie wykazywało problemu, więc obejrzałem ten problem, tworząc odziedziczoną wersję mojego kontekstu i używając metoda Fluent, aby wyłączyć właściwość nawigacji podczas tworzenia.
Tak więc mój pierwotny byt wyglądał tak:
Stworzyłem więc specjalny dziedziczony kontekst, który wyglądał następująco:
a następnie zmienił kod, który utworzył nową jednostkę, aby użytkownik miał nowy typ kontekstu
Mam nadzieję, że to komuś pomoże
źródło
W moim przypadku pole Id, którego FK jest tylko w Entity Framework, właściwość „StoreGeneratedPattern” została ustawiona na „Itentity” zamiast „None”
źródło