Jag har en lista med entiteter, det i sig är ju inga problem :P min fundering är bara om det blir bäst att plocka ut den entiteten som är vald och lazy loada eller om jag lika gärna kan hämta en ny lista med under-entiteter?
för min del spelar det ingen roll, men det som är "snyggast" är ju roligast :)
Jag vet inte hur EF fungerar med med lazyloading, men har det inget stöd för lazyloading kan du ju göra så att du kan anropa EF från den property som du vill ha lazyloading på för att hämta listan, dock så kopplar du samman ditt domänlager hårt mot EF vilket inte alltid är önskvärt.
public IList<OrderLine> OrderLines
get {
if(this.orderLines = null)
{
this.orderLines = EF.GetOrderLinesByOrder(this);
}
return this.orderLines;
}
}
Jag tycker det nog är snyggast om man kan minska hämtningar från databasen och arbeta mot domänen så mycket som möjligt, dock så innebär detta att du styr hämtningar mindre.
det var lite knepigare än så. Jag hoppas verkligen att det finns bättre alternativ men såhär gör jag för tillfället iaf
using (Entities entities = new Entities())
{
ObjectQuery<Entity> entity = entities.Entity;
var entQuery = from e in entity
select e;
foreach (Entity ent in entQuery)
{
ent.SubEntity1.Load();
ent.SubEntity2.Load();
ent.SubEntity3.Load();
ent.SubEntity4.Load();
}
return entQuery.ToList<Entity>();
}
Ska väl tillägga att jag gör så för att jag vill kunna arbeta med mycket data under en lång period och sedan persistera allting på en gång.
Jag har en lista med entiteter, det i sig är ju inga problem min fundering är bara om det blir bäst att plocka ut den entiteten som är vald och lazy loada eller om jag lika gärna kan hämta en ny lista med under-entiteter?
Jag förstår inte frågan riktigt, LazyLoading använder du för att inte hämta refererade collections samtidigt som du hämtar datan till ditt objekt. Eftersom du inte vet om du behöver den refererade datan och då finns det ingen anledning att hämta den.
I ditt fall så verkar det som du vill ha alla data direkt för att kunna bearbeta den och sedan persistera, så din kod verkar ju göra det du vill även om jag hoppas (för ms skull) att det finns smartare sätt än så i EF att få alla data på en gång.
Njae, jag skulle helst slippa hämta allting direkt men lyckades inte sy ihop det så jag gjorde som ovan och tänkte att då struntar jag i all kommunikation med databasen förutom den enda gången och när användaren sparar.
Problemet eller jag vet inte om det är något problem men det är (100 * 500 rader) + (100 * 20 rader) + (100 * 20 rader) det kanske blir lite mycket att läsa in i minnet...?
Jag tycker inte det är farligt att ha mycket saker i minnet, frågan är bara hur många andra som arbetar mot databasen och hur kritiskt det är att informationen är färsk.
Tycker den datamängden du beskriver är ganska liten, men det beror ju förstås på vilken data du har i dina tabeller :).
Men som jag sa ovan, hur ofta uppdateras datan och hur kritiskt är det med uppdaterad data?
Tillägg: Det finns smartare sätt att hämta datan, jag behöver ju inte använda LINQ > Entities. Skulle kunna använda någon av de andra frågetyperna istället.
Tycker den datamängden du beskriver är ganska liten, men det beror ju förstås på vilken data du har i dina tabeller :)
Följdfråga, ska det verkligen ta 1,5 sekund att databinda 500 rader med ca 20 kolumner i varje rad? Hur snabbt kan man få det i NHibernate? Det är ju bara tomma rader för tillfället..
Följdfråga, ska det verkligen ta 1,5 sekund att databinda 500 rader med ca 20 kolumner i varje rad? Hur snabbt kan man få det i NHibernate? Det är ju bara tomma rader för tillfället..
Nope, men du har kanske något event på din controll som triggas när du binder data till controllen och om det eventet körs 500 gånger så räcker det med att eventet tar 3ms för att du skall behöva vänta 1,5 sekunder...
Ja en datagridview, har ingen aning om varför det är så segt. Det var bra mycket rappare tidigare igår. Har trilskats fram och tillbaka utan att märka någon skillnad. Personligen tycker jag 1,5 sekunder är löjligt!
/Edit
En av sakerna jag gjorde sedan det blev långsamt var att sätta annan färg på varannan rad men det ska väl inte göra att det tar 1,4 sekunder längre tid? I princip så är det bara:
Jag testade precis att ta bort min modell och lägga till den. Nu gick det hur snabbt som helst att databinda igen. Tyvärr tog jag bort varannan radfärg och lite också.
Min modell var korrupt och felaktig och egentligen skulle jag inte ha kunnat köra programmet alls. Ramverket har nog haft något cache:at någonstans.
Jag hade lite problem med modellen igår. Eller jag hade problem med subversion! Chefen kom in helt apropå och tyckte vi skulle ha två kolumner till i databasen och svn vägrade låta mig ta bort och lägga till modellen. Nu verkar det som om det fungerar i alla fall. Ska testa att sätta tillbaka autosize och annat nu.
396 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e