Diskuze: entity framework - načtení části databáze.

C# .NET .NET (C# a Visual Basic) entity framework - načtení části databáze. American English version English version

Avatar
natech
Člen
Avatar
natech:

Potřeboval bych vědět, jakým způsobem přistoupit k tomuto problému.
Mám např. DbContext se třemi tabulkami.
První tabulku připojuji na datagrid:

public partial class MainCl : Window
    {
ChimEntities database = new ChimEntities();

public MainCl()
{
database.table1.Load();
datagrid1,ItrmsSource = database.table1.Local;
}
}

Nenašel jsem jakoukoli možnost jak zajistit načítání jen části tabulky, např od nějakého datumu.

Úplně stejně je to s tabulkou 2:

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
//toto nenačte nic
database.Entry((table1)e.AddedItems[0])
                .Collection(p => p.table2)
                .Query()
                .Where(p => p.seznam.Contains(slovo) || p.seznam.Contains(slovo2))
                .Load();

//toto způsobí načtení všech záznamů příslušných k vybranému řádku
//(tady mě napadá, že v prvním příkladu je možné vynechat řádek s funkcí Load())
            dataGridKontaktFirmy.ItemsSource = ((table1)e.AddedItems[0]).table2;
}

Jakým způsobem se dá v entity frameworku pracovat s načtením jen některých záznamů?

Děkuji za každou radu.

 
Odpovědět 8. listopadu 8:45
Avatar
Odpovídá na natech
Michal Štěpánek:

V té druhé ukázce používáš

.Where(p => p.seznam.Contains(slovo) || p.seznam.Contains(slovo2))

tak si tu podmínku uprav i pro datum...

Nahoru Odpovědět  +1 8. listopadu 10:18
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
natech
Člen
Avatar
Odpovídá na Michal Štěpánek
natech:

No právě že mi ta podmínka nenačte nic a pak při přiřazení do ItemsSource datagridu se načte komplet všechno.

 
Nahoru Odpovědět 8. listopadu 10:54
Avatar
Odpovídá na natech
Michal Štěpánek:

Pak jí máš asi nějak blbě napsanou. Já v EF nejsem zběhlej, používám ho pouze "z donucení" u webaplikací v ASP.NET MVC. U desktopových aplikací používám klasické SQL příkazy, ale i tak si myslím, že jinak než podmínkou se k požadovanému efektu nedostaneš.

Nahoru Odpovědět 8. listopadu 11:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
jozef_i
Člen
Avatar
jozef_i:

Malo by to ísť. Urobíš
datagrid1.Item­sSource = database.table1­.Where(p=>p.Da­tum>=datumOd)­.ToList();
Kde datumOd je dátum (DateTime premenná) od ktorého to chceš filtrovať...

 
Nahoru Odpovědět 8. listopadu 14:38
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Já nevím jak ostatní, ale já tady trošičku cítím problém s porovnáváním datumu :-) To by ti ale melo spadnout (mozna to odchytava treba te grid catchem).. Budes muset sahnout po DbFunctions.

 
Nahoru Odpovědět 8. listopadu 17:22
Avatar
natech
Člen
Avatar
natech:

Takže jeden problém byl v tom, že jsem měl povolené LazyLoading. Po vyřazení se nenačítají nechtěné záznamy

database.Configuration.LazyLoadingEnabled = false;

Druhý problém je, že nefungují podmínky Where(p => p.seznam.Conta­ins(slovo) || p.seznam.Conta­ins(slovo2))
V tabulce2 mám v seznam toto
"slovo1|slovo2|slo­vo3|" (případně atd.) a potřebuji načíst jen záznamy, které obsahují v seznamu dané slovo.
V DbFunctions jesm si nic nevybral.

 
Nahoru Odpovědět 9. listopadu 13:56
Avatar
natech
Člen
Avatar
natech:

Podmínky už fungují. Chyba byla jinde.

 
Nahoru Odpovědět 9. listopadu 14:51
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 8 zpráv z 8.