Właściwość zależna w ReferentialConstraint jest mapowana do kolumny generowanej przez sklep

Dostaję ten błąd podczas zapisu do bazy danych:

Właściwość zależna w Referencjalconstraint jest odwzorowywana na kolumna generowana 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 jest następujący:

Tutaj wpisz opis obrazka

Author: Gilles, 2011-06-17

11 answers

Czy to możliwe, że zdefiniowałeś złą relację kolumn między tabelami? różne kolumny i jedna została ustawiona jako autonumeryczna.

To mi się przydarzyło.

 155
Author: ju4nj3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-08 11:40:59

Ten błąd mówi, że używasz nieobsługiwanej relacji lub masz błąd w mapowaniu. Twój kod jest najprawdopodobniej absolutnie niezwiązany z błędem.

Błąd oznacza, że masz pewną relację między podmiotami, w których właściwość klucza obcego w jednostce zależnej jest zdefiniowana jako Store generated. Store wygenerowane właściwości są wypełniane w bazie danych. EF nie obsługuje przechowuj wygenerowane właściwości jako klucze obce (jak również właściwości obliczeniowe w kluczach podstawowych).

 45
Author: Ladislav Mrnka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-17 10:56:23

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 komuś w przyszłości pomóc.

Na tablicach zależnych kolumny klucza obcego zostały ustawione na StoreGeneratedPattern= "Identity". Musiałem zmienić na "brak". Niestety, robiąc to wewnątrz designer w ogóle nie działa.

Zajrzałem do generowanego przez projektanta XML (SSDL) i te właściwości nadal tam były więc usunąłem ręcznie. Musiałem również naprawić kolumny w bazie danych(Usuń tożsamość (1,1) z Utwórz tabelę SQL)

Po tym problem zniknął.

 7
Author: surfen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-31 00:02:48

Miałem ten sam problem i po pewnym kopaniu w projektowaniu tabel w sql server okazało się, że błędnie ustawiłem klucz podstawowy table również jako klucz obcy.

SQL server table design flow

Na tym obrazku widać, że jobid jest głównym kluczem table, ale także błędnie obcym.

 4
Author: Manish Bhakuni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 11:54:44

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ć czas ręcznego wykonywania aktualizacji.

 1
Author: rickjr82,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-24 14:28:29

Dla mnie był to błędnie umieszczony klucz obcy w tabeli, ale nawet po zmianie tabeli, aby go naprawić, nadal nie działał. Musisz zaktualizować pliki EDMX (i nie wystarczy, aby "odświeżyć" tabelę z modelu, musisz usunąć i dodać tabelę ponownie w modelu).

 1
Author: knocte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 05:11:06

Sprawdź ponownie relacje między płatnościami 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ślnie ustawiony, a ta wartość domyślna jest zwracana, gdy tabela nadrzędna jest zmieniana, więc należy uważać, aby zmienić wartości w odpowiedniej kolejności w oknie" tabele i kolumny".

Również po naprawieniu problematycznych relacja, istnieje duża szansa, że proste "odświeżanie" na modelu nie usunie poprawnie błędnej relacji z modelu i dostaniesz ten sam błąd nawet po " fix", więc zrób to sam w modelu przed wykonaniem odświeżania. (Odkryłem to na własnej skórze.)

 0
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-30 14:18:21

Oprócz zaakceptowanej odpowiedzi, jeśli używasz EF Reverse poco generator lub innego narzędzia, które generuje Twoje POCO, upewnij się, że zregenerujesz je!

 0
Author: adam0101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-13 16:37:22

W moim przypadku problem był spowodowany posiadaniem dwustronnej relacji 1-1:

class Foo{
[Key]
Id
[ForeignKey]
BarId
...
}
class Bar{
[Key]
Id
[ForeignKey]
FooId
...
}

Musiałem po prostu wyjąć jeden z dwóch kluczy obcych (i tak nie jest to konieczne).

 0
Author: wecky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-15 11:14:37

W moim przypadku po prostu nie miałem praw ustawionych poprawnie w bazie danych. Miałem tylko do odczytu set i Entity framework dawał mi błąd ReferentialConstraint, który mnie wyrzucił. Dodano dodatkowe uprawnienia do zapisu i wszystko było dobrze.

 0
Author: Mdhattr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 12:57:42

W moim przypadku miałem właściwość generowaną przez bazę danych i właściwość nawigacyjną ForeignKey skonfigurowaną do odwoływania się do tabeli powiązanej 1 do 1.

To nie było coś, co mogłem usunąć, musiałem być w stanie zarówno ustawić klucz główny encji do generowania bazy danych i musiałem być w stanie odwołać się do Tabeli 1 do 1 jako właściwości nawigacyjnej.

Nie wiem, czy to samo dotyczy innych, ale ten problem pojawiał się tylko podczas tworzenia nowego obiektu, czytania lub edycji istniejącego encje nie wykazywały problemu, więc obejrzałem problem, tworząc odziedziczoną wersję mojego kontekstu i używając metody Fluent, aby wyłączyć właściwość nawigacji podczas tworzenia.

Więc mój pierwotny byt wyglądał tak:

public partial class MyEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid id{ get; set; }


    // Navigation
    [ForeignKey("id")]
    public PathEntity Path { get; set; }
}

Więc zrobiłem specjalny dziedziczony kontekst, który wyglądał tak:

    private class _navPropInhibitingContext : EF.ApplicationDBContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<MyEntity>()
                .Ignore(e => e.Path);

        }
    }

, a następnie zmieniono kod, który utworzył nowy obiekt, aby uczynić użytkownika nowego typu kontekstowego

    using (var specialContext = new _navPropInhibitingContext())
    {
        var dbModel = new MyEntity() 
        {
            ...
        };

        specialContext.MyEntity.Add(dbModel);
        await specialContext.SaveChangesAsync();
    }

Hope this helps somebody

 0
Author: Chris Terry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 15:42:30