IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: WPF jak správně na DbContext

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
vlastajuracka:6.3.2018 22:07

Zdravím mám dotaz ohledně vytváření DbContextů. Řekněme, že mám tři tabulky: Log, Customer a Item Customer k Itemu je 1:N a mám dotaz ohledně toho zda DbSet mám plnit v jednom souboru nebo to mám rozdělit ? Například budu mít CustomerContext, LogContext a ItemContext nebo stačí jenom jeden soubor ? předem děkuji za info :)

 
Odpovědět
6.3.2018 22:07
Avatar
Odpovídá na vlastajuracka
Marian Benčat:7.3.2018 0:05

OH. 3 Soubory, nebo instance? Soubory jsou bezne, ze to plnis třeba ve 30ti souborech.. Mít vice instanci DB contextu nad 1 DB není dobrý nápad, protože se pak budes hodně hodně hodně divit, az si vytahnes z jednoho kontextu Customera, pak ho budeš chtít uložit v druhem a DB context ti začne hlásit, ze tam mas duplicitní key :)) jeden kolega to řeší par vláken pod tebou :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.3.2018 0:05
Totalitní admini..
Avatar
vlastajuracka:7.3.2018 12:04

Dobře super díky moc. :)

 
Nahoru Odpovědět
7.3.2018 12:04
Avatar
Odpovídá na vlastajuracka
Marian Benčat:7.3.2018 15:40

Obecně, vyvaruj se použití DBContextu jako nějaké "identity mapy" nebo jako cache.. jinak budeš mít spoustu průserů.. (presto, ze vnitrne je DBContext identity map)

Bohužel je v desktopových velmi oblíbené používat jen 1 instanci Entity framework DBContextu po celý lifespan aplikace... To nese jen samá negativa.. Vyvaruj se tomu pokud možno a měj 1 DBContext = 1 transakce, ale tím nemyslím 1 DB transakce, ale 1 Unit of work (1 logická transakce).

Pokud tedy máš nějaké okno pro vložení nového něčeho, je dobré třeba pro každé 1 vložení vytvořit tu instanci DBcontextu.. na první pohled se zdá člověku, že je to hodně práce pokaždé (muí se natahat konfigurace, sestavit základní graph, předbuildit třeba nějaký GraphQuery)..

na druhou stranu je mnohem dražší uvolňovat nějaký obrovský entity graph, nebo trackovat větší množství entit (přesto, že oni to mají udělaný přes dynamic proxies), či vyhodnocovat všechny entity v grafu při savechanges.

Obě řešení s sebou nesou nevýhody.. proto ti ani neřeknu jednoduše "1 DB context = 1 edit window v tvé aplikaci", povím ti 1 DB Context = 1 UOW.

Co bude v tvé aplikaci 1 UOW bude podle situace a rozhodnutí je na tobě.

Nahoru Odpovědět
7.3.2018 15:40
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
vlastajuracka:7.3.2018 20:05

Moc děkuju, že si mi to tkhle vysvětlit :) Jsem hned radši, že vím na čem jsem v čem jsou výhody - nevýhody atd. díky moc :)

 
Nahoru Odpovědět
7.3.2018 20:05
Avatar
Martin
Člen
Avatar
Martin:8.3.2018 11:06

Ja jsem ten kolega co s tim mel to douhy vlakno a je to vopruz :D, takze jak pise Marian.

 
Nahoru Odpovědět
8.3.2018 11:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.