Diskuze: Vložení dat do databáze pomocí EF
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


skús tam neposielať ten User object, jednoducho tam pošli null. Možno by bolo fajn tu hodiť aj jednotlivé kódy týchto entít. a service ak tak.
Děkuju za odpověď. Ale musím říct, že mi příliš nepomohla přesně todle jsem totiž napsal já. Že vím že se to dá udělat že tam ten obejkt vůbec nepošlu a vlastně naplním to ostatní ale já se ptám zda se nějak nedá udělat to že tam pošlu všechno a ono to samo pozná že ten obejtk nechce.
bez kódu veľa vody nenamútime. Riešenie je použiť 2 contexty. Z jedného vytiahnuť Usera a do druhého zapísať UserPhoto. Lenže nemáme veľmi odkiaľ vedieť, čo sa tam vlastne deje.
mít více DBContextu - obzvláště při jedné logické transakci je
naprosto fantastický způsob, jak si nasr*t do bot 
Ano to vím no že mít více DBContextu by se nemělo úplně dělat a to také dodržuji. A bez kódu myslel jsem, že je to jasné kód by mohl vypadat následovně:
var newUserPhoto = new UserPhoto() {
Name = "Photo2",
Document = "photo.jpg",
User = .... (Objekt uživatele)
User_ID = (Objekt uživatele).ID
};
//Co bych chtěl
_userPhotoService.UserPhotos.Add(newUserPhoto);
//Co musím udělat
_userPhotoService.UserPhotos.Add(new UserPhoto() {
Name = newUserPhoto.Name,
Document = newUserPhoto.Document,
User_ID = newUserPhoto.ID,
//User = newUserPhoto - todle právě nejde udělat proto nemůžu použít to co chci.
});
Stačí todle jako příklad ? Když použiju to co bych chtěl vyhodí to tuto hlášku: An entity object cannot be referenced by multiple instances of IEntityChangeTracker
public class DatabaseContext : DbContext
{
public DbSet<Work> Works { get; set; }
public DbSet<WorkDay> WorkDays { get; set; }
public DbSet<Log> Logs { get; set; }
public DatabaseContext() : base("WorkContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
2. User mi vzniká v oknu kde si vyplňuju uživatelovo jmeno a dokument pak je prave poslan ten newUserPhoto to je ten objekt. Napsal jsem to tkhle rychle jenom abych to zkrátil jak jsem dal ten priklad tk to Photo2 atd. je vlastně brano z textboxu, ktere jsou napojeny na newUserPhoto
posielaj tam len user ID, User objekt tam vobec nemusis nastavovat EF si ho vie pri SaveChanges sam doplnit resp. ho vobec nepotrebuje ak ma cudzi kluc.
Jj díky nakonec jsem to tk udělal, ale příde mi to zvláštní. User si ulozim do pomocny proměny a u objektu ktery vkladam do db nastavim user na null a pak ho tam za vratim.
Nějak pořád nechápu, proč do toho objektu "UserPhoto" pořád tlačíš celý objekt "User"? K čemu to tam potřebuješ, když přeci v DB máš referenci na User pomocí cizího klíče, ne? Pohodlně tam stačí mít ID_user a všechno musí makat OK...
Todle je skutečně problém EF a nejen EF.. je to problém obecně ORM ( i kdžy todle je zrovna asi specifické pro EF a tuším že i doctrine) .. nikdy sis nekladl otázku:
"a proč to jako nemůžu udělat?"
Ty bys měl být schopný todle udělat.. problém je, že tě nedostatečně
ten EF odstiňuje od databáze a od toho jak uvnitř funguje (od identity
mapy).
proto první věc, co zkušený člověk udělá, když začne pracovat s nějakým ORM a myslí to vážně (třeba při použití DDD) je, že vypne:
Případně.. to nechá zapnuté, ale rozhodně z DAL vstvy nevrací žádný "entity object".
Tedy - pokud už má potřčbu dělat dynamický repository.. nemá
Repository<T> where T: entita
ale
Repository<TEntita, TModel> where T:entita, TModel:DomainObject.:
A uvnitř toho repository - jeste pred tim, než se ten objekt navratí se to
mapuje..
Hodně jednoduše (a ne ideálně) to jde udělat pomocí Automapperu, lépe to jde udělat pomocí Select() expressionu.
Stejně tak samozřejmě tvůj DAL přijímá doménový objekt, uvnitř ho mapuje na Entitu a to stylem:
Jedině tak totiž uděláš opravdu funkční abstrakci.
Zobrazeno 12 zpráv z 12.