Entity Framework   zodpovězená otázka

C#, Entity Framework

Dobrý den!

Asi nějak nechápu jak funguje Entity Framework CF, respektive patrně očekávám jiné chování.

Níže maximálně zjednodušený příklad. Očekával bych, že ve firstCategory.Products bych měl obdržet produkty pro tuto kategorii, ale obdržím pouze null.

Děkuji za objasnění.

public class Product
{
   [Key]
   public int Id { get; set; }
   public string Name { get; set; }
}

public class Category
{
   [Key]
   public int Id { get; set; }
   public string Name { get; set; }
   public ICollection<Product> Products { get; set; }
}

using (var dbo = new DboContext())
{
   var firstCategory = dbo.Categories.FirstOrDefault();
}
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží na více okolnostech, pokud například není zaplý lazy loading, pak by to asi mělo být něco jako dbo.Categories.Include(x=> x.Products).FirstOrDefault();

Pak bych osobně ještě nastavil sám cizí klíč, nevím jak si to v tomhle případě definuje by default EF - spíše se ti to špatně mapuje a máš to proto NULL. Tedy u Product bych měl ještě property

public int CategoryId {get; set;}

[ForeignKey("CategoryId")]

public Category Category {get; set;}

Předpokladem je tedy povinná kategorie (nepovinná by byla int?)... píšu to zpatra ale tak nějak by to mělo být...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kolekce musí být virtuální, tedy: public virtual ICollection<Product> Products { get; set; }

Long story: EF vytváří interně za runtime poděděné třídy, které se starají právě o lazy loading a podobné. Takže pokud není virtual, tak ji nejde overridnout a tedy nemůže fungovat lazy loading.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback