Wpis z mikrobloga

#programowanie #csharp #webdev #bazydanych

Używał ktoś EF Core w połączeniu z npgsqlem jako code-first? Mam problem z relacją wiele-wiele.

https://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

W tym przykładzie gość po prostu dorzucił wzajemne kolekcje i framework sam wykminił aby sobie zrobić table łączące, nawet bez drutowania niczego w model builderze. No ale domyślam się że to w użyciu z MSSQL a nie PostgreSQL.

U mnie jak wrzuciłem tylko wzajemne kolekcje, to EF rzygał, że nie wie o co mi chodzi ("Unable to determine the relationship represented by navigation property"). Jak dokonfigurowałem modelBuilder w taki sposób: https://pastebin.com/fWng6uTp ,
to mi pododawał sztuczne id tylko zamiast stworzyć tabele łączące ( ͡° ʖ̯ ͡°) Problem w tym, że on w drugim przykładzie miał możliwość ustawienia relacji .HasMany(x).WithMany(y) a u mnie jest tylko .HasMany(x).WithOne(y) i prawdopodobnie dlatego się posypało, bo nie byłem w stanie tego odpowiednio zdefiniować.
  • 29
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ZaoSan: No właśnie nie. Jeden rekord. Ale tyle jest przy pierwszym odpaleniu, potem szybciej bo sobie optymalizuje (a raczej cache'uje), więc ledwo 30 ms (i jedno i drugie trwa wtedy tyle samo). Z tego co podejrzałem to EF tam nałożył indeksy, więc nie wiem czy da radę szybciej. Jeszcze w grę może wchodzić jakieś leniwe tworzenie obiektów pod spodem i dlatego pierwsze odpalenie tak długo trwa. Raw SQL jest ledwo
  • Odpowiedz
@ZaoSan: Bazy potrafią różne sztuczki robić. Optymalizują sobie choćby w taki sposób, że ładują do RAMu dane na podstawie statystyk więc siłą rzeczy kolejne zapytania o to samo będą szybsze.
  • Odpowiedz
no to baza, a ja pisałem odnośnie twojego:

Entity zresztą też ma jakieś triki po swojej stronie zaszyte i pewnie jak się pyta po kilka razy o to samo, to też sobie gdzieś z boku trzyma.
  • Odpowiedz