Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] objecten verdwijnen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een vrij irritant probleem waar ik geen oplossing voor weet. Het is niet zo eenvoudig om uit te leggen maar ik doe toch een poging:

Er is een statische klasse Database met een aantal statische functies die objecten genereert uit de database:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static class Database
{
static List<Object> getObjecten()
{
 List<Object> objecten = new List<Object>();

 ...
 foreach (datarecord in database)
  Object o = new Object();
  objecten.Add(o);
 }
 ... 

  return objecten
 }
}


In de hoofdklasse heb ik dan zoiets:

code:
1
2
3
4
5
6
7
8
9
10
11
12
private List<Object> objecten;

public void haalObjectenOp()
{
   this.objecten = Database.getObjecten();


......


   // vanaf hier beginnen plots fouten te gebeuren in het object (memory die write protected wordt enzo)
}



Ik heb dus de indruk dat de garbage collector al objecten aan het opruimen is die ik later in de code wel nog gebruik. Iemand die mij kan helpen?

[ Voor 4% gewijzigd door Verwijderd op 11-04-2011 22:55 ]


  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Je zou gelijk kunnen hebben wat betreft geheugen. Is het misschien een idee om in plaats van statische classes een singleton te gebruiken? Dat is mijn inziens ook een nettere aanpak in jouw geval en waarschijnlijk lost dat het probleem ook op, maar dat kan ik niet met 100% zekerheid zeggen, ik werk niet dagelijks in .NET

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.


Verwijderd

Topicstarter
Het volgende heb ik al geprobeerd wat toch sterk lijkt op singleton, maar dit gaf geen ander resultaat:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static class Database
{
static private List<Object> objecten;

static List<Object> getObjecten()
{
 objecten = new List<Object>();

 ...
 foreach (datarecord in database)
  Object o = new Object();
  objecten.Add(o);
 }
 ... 

  return objecten
 }
}


Misschien is er nog een ander probleem dan memory die ik over het hoofd zie die zorgt dat m'n objecten raar doen?

[ Voor 12% gewijzigd door Verwijderd op 11-04-2011 23:23 ]


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Sluit je toevallig de database en gooi de de database records in een lijst? Als je de DB connectie sluit mag je volgens mij ook niks meer doen met je records.

  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Verwijderd schreef op maandag 11 april 2011 @ 23:21:
Het volgende heb ik al geprobeerd wat toch sterk lijkt op singleton, maar dit gaf geen ander resultaat:

code:
1
...


Misschien is er nog een ander probleem dan memory die ik over het hoofd zie die zorgt dat m'n objecten raar doen?
Dat is toch echt niet mijn idee van een singleton. Ik heb geen idee of die List op een gegeven moment buiten de scope gaat binnen in je functie, maar daar lijkt het wel op. In de taal waar ik het meest in werk (Objective-C) daar kan je geen globale variablen bereiken met statische functies, dus daar zou wat jij aan het doen bent sowieso onmogelijk zijn.

Maak anders een eenvoudige klasse (geen statische) en kijk of het dan wel goed werkt. Dan blijven de instance variablen sowieso in de scope zolang je een referentie hebt naar een object van de klasse. Dan kan je echt uitsluiten of het een geheugen probleem is. En mocht dat zo zijn, dan kan je de klasse omvormen naar een echte singleton of anders een andere oplossing zoeken.

Edit: bij nader inzien zou de code in je eerste post wel moeten werken. Waarschijnlijk ligt het probleem toch ergens anders, maar waar ...? Heb je misschien een stacktrace?

[ Voor 7% gewijzigd door MacWolf op 12-04-2011 00:39 ]

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik vermoed dat je probleem echt compleet ergens anders ligt, en niet in de code die jij nu post. Je zou nooit zomaar access violations moeten krijgen in .Net, dan is er echt meer aan de hand. Gebruik je ergens native interop, of een library die dat doet?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Zijn er meerdere threads die de instantie van hoofdklasse zouden kunnen benaderen?

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • - peter -
  • Registratie: September 2002
  • Laatst online: 24-11 10:41
Het lijkt me zowieso erg onmogelijk dat de garbage collector items opruimt, die jij nog in je code gebruikt. Dan moet er wel iets heel raars aan de hand zijn. Wel zou het idd kunnen zijn dat je objecten gelinked zijn aan je database connectie en dat het sluiten daarvan de objecten op de een of andere manier vernietigd/"aantast".

Verwijderd

Topicstarter
De database class is nu niet meer statisch maar normaal, maar het lijkt geen effect te hebben.
Het ziet er inderdaad naar uit dat bij de volgende aanvraag op de database de data corrupt raakt.

Want dit werkt wel:
code:
1
2
3
4
5
            hosts = db.getHosts();

            hosts[0].GetVirtualMachines();

            clusters = db.getClusters();


Maar hier krijg ik een fout in de GetVirtualMachines() methode:
code:
1
2
3
4
5
            hosts = db.getHosts();

            clusters = db.getClusters();

            hosts[0].GetVirtualMachines();


Dit zijn de twee methodes in de database class waarover het gaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
    public class Database
    {
        DatabaseConnector _db = new DatabaseConnector("c:\\Database.accdb");

        public List<IHost> getHosts()
        {
            List<IHost> hosts = new List<IHost>();
            string comm = "SELECT * FROM Hosts";

            DataSet DS = _db.RetrieveSql(comm, null);
            DataTable myDT = new DataTable();
            myDT = DS.Tables[0];
            foreach (DataRow row in myDT.Rows)
            {
                IHost h;

                switch (row["type"].ToString())
                {
                    case "Amazon":
                        h = new AWSHost(row["hostname"].ToString(), row["username"].ToString(), row["password"].ToString());
                        break;
                    case "VMWare":
                        h = new VMWareHost(row["hostname"].ToString(), row["username"].ToString(), row["password"].ToString());
                        break;
                    default:
                        h = null;
                        break;
                }

                h.Name = row["naam"].ToString();

                hosts.Add(h);
            }

            return hosts;
        }

        public List<Cluster> getClusters()
        {
            List<Cluster> clusters = new List<Cluster>();
            string comm = "SELECT * FROM Clusters";

            DataSet DS = _db.RetrieveSql(comm, null);
            DataTable myDT = new DataTable();
            myDT = DS.Tables[0];
            foreach (DataRow row in myDT.Rows)
            {
                Cluster c = new Cluster(row["Naam"].ToString(), Convert.ToInt32(row["serverport"]));

                clusters.Add(c);
            }

            return clusters;
        }


Van zodra deze lijn uitgevoerd wordt in de getClusters() methode loopt het fout in de eerder aangemaakte AWSHost klasse:
DataSet DS = _db.RetrieveSql(comm, null);

Hoe zorg je er dan voor dat de data niet meer gelinkt is met de dataset?

Andere opmerkingen op mijn code zijn ook welkom. Bijvoorbeeld hoe je die switch case elimineert om zo een meer dynamische code te krijgen.

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Wat gebeurd er als je de DatabaseConnector in beide methodes instantieert in plaats van als member?

Trouwens: belangrijke reden om access te gebruiken? Als daar geen belangrijke reden voor is, zou ik serieus kijken naar een Local Database (sdf) icm Entity Framework. Dan ben vrij snel up&running met een standaard O/R-mapper-oplossing. Die DatabaseConnector klinkt als een eigen browsel, is het niet?

[ Voor 44% gewijzigd door mOrPhie op 12-04-2011 10:15 ]

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Tip: doe ipv [ code ] eens [ code = c# ]. Zonder de spaties uiteraard :)

'You like a gay cowboy and you look like a gay terrorist.' - James May


Verwijderd

Topicstarter
mOrPhie schreef op dinsdag 12 april 2011 @ 10:07:
Wat gebeurd er als je de DatabaseConnector in beide methodes instantieert in plaats van als member?

Trouwens: belangrijke reden om access te gebruiken? Als daar geen belangrijke reden voor is, zou ik serieus kijken naar een Local Database (sdf) icm Entity Framework. Dan ben vrij snel up&running met een standaard O/R-mapper-oplossing. Die DatabaseConnector klinkt als een eigen browsel, is het niet?
De reden waarom ik access gebruik en geen SQL Server is dat het veel makkelijker is om gewoon een bestand mee te kopieren ipv telkens de hele database te installeren. Misschien dat ik dit later nog aanpas.

Die DatabaseConnector is inderdaad een eigen brouwsel. De DatabaseConnector in beide methoden instantieren heeft geen effect.

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 23-11 19:04

Sebazzz

3dp

Is je geheugen in orde? Ik heb wel eens op een computer gewerkt waarbij het geheugen niet helemaal in orde was, het ding werkte voor de rest prima, maar met .NET en debuggen kreeg ik allemaal vage dingen zoals AccessViolations en ExecutionEngineExceptions. Na het vervangen van het geheugen was het toen opgelost.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Verwijderd

Je geeft aan misschien later te willen wisselen van database maar vergis je hier niet in.
Om direct al ondersteuning te bieden in een eigen laag zou de DbProviderFactory wel wat zijn voor jou.
http://msdn.microsoft.com...on.dbproviderfactory.aspx

Bij het ophalen van de Host zou je ook direct de Virtual Machines kunnen vullen, is weer een vergeet moment minder.

Kun je de objecten wel aanmaken en instant houden als je ze vult zonder database?

Verwijderd

Topicstarter
Ik ben toch serieus gek aan het worden.

dit werkt niet:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public static List<IHost> getHosts()
        {
            List<IHost> hosts = new List<IHost>();

            string comm = "SELECT * FROM Hosts";

            DataSet DS = _db.RetrieveSql(comm, null);
            DataTable myDT = new DataTable();
            myDT = DS.Tables[0];
            foreach (DataRow row in myDT.Rows)
            {
                IHost h;

                switch (row["type"].ToString())
                {
                    case "Amazon":
                        h = new AWSHost("eu-west-1", "AKIAJFK6HC6VAKDFE***", "d3+OKRn5tt4ic5peVayVt+iES3bcJCcn8irwz***");
                        break;
                    case "VMWare":
                        h = new VMWareHost("https://192.168.36.184/sdk", "Administrator", "Test1");
                        break;
                    default:
                        h = null;
                        break;
                }

                hosts.Add(h);
            }

            return hosts;
        }

De default case wordt voor de duidelijkheid niet aangesproken.

maar dit werkt wel terwijl de output van de methode krak dezelfde is :s :
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        public static List<IHost> getHosts()
        {
            List<IHost> hosts = new List<IHost>();

            int[] numbers = { 0,1 };

            foreach (int j in numbers)
            {
                IHost h;

                if (j == 0)
                {
                    h = new AWSHost("eu-west-1", "AKIAJFK6HC6VAKDFE***", "d3+OKRn5tt4ic5peVayVt+iES3bcJCcn8irwz***");
                }
                else
                {
                    h = new VMWareHost("https://192.168.36.184/sdk", "Administrator", "Test1");
                }

                hosts.Add(h);
            }

            return hosts;
        }


De code genereert dus in beide gevallen in principe hetzelfde als output maar in het eerste geval krijg ik verder in het programma problemen en in het tweede geval niet.

Zelfs als ik dit doe krijg ik problemen terwijl de code eigelijk ongeveer dezelfde is als het tweede geval:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        public static List<IHost> getHosts()
        {
            List<IHost> hosts = new List<IHost>();

            int[] numbers = { 0,1 };

            string comm = "SELECT * FROM Hosts";

            DataSet DS = _db.RetrieveSql(comm, null);
            DataTable myDT = new DataTable();
            myDT = DS.Tables[0]; 

            foreach (int j in numbers)
            {
                IHost h;

                if (j == 0)
                {
                    h = new AWSHost("eu-west-1", "AKIAJFK6HC6VAKDFE***", "d3+OKRn5tt4ic5peVayVt+iES3bcJCcn8irwz***");
                }
                else
                {
                    h = new VMWareHost("https://192.168.36.184/sdk", "Administrator", "Test1");
                }

                hosts.Add(h);
            }

            return hosts;
        }


_db instantieren in de methode zelf geeft hetzelfde.

[ Voor 31% gewijzigd door Verwijderd op 12-04-2011 11:49 ]


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op dinsdag 12 april 2011 @ 10:39:
[...]


De reden waarom ik access gebruik en geen SQL Server is dat het veel makkelijker is om gewoon een bestand mee te kopieren ipv telkens de hele database te installeren. Misschien dat ik dit later nog aanpas.
SQL Server Express

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:05

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op dinsdag 12 april 2011 @ 11:41:
...
De default case wordt voor de duidelijkheid niet aangesproken.
...
Is dat een aanname of heb je dat middels een breakpoint getest?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Dat is geen aanname, er werd een breakpoint gezet om dat te controlleren :)

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Verwijderd schreef op dinsdag 12 april 2011 @ 10:39:
[...]


De reden waarom ik access gebruik en geen SQL Server is dat het veel makkelijker is om gewoon een bestand mee te kopieren ipv telkens de hele database te installeren. Misschien dat ik dit later nog aanpas.
Een local database (sdf) van SQL Server Compact Edition werkt ook zo. Een referentie in je applicatie naar de SQL Server Compact dll's is voldoende. Er is geen installatie van wat voor software dan ook nodig. Ik garandeer je dat dat alles een stuk stabieler is dan een eigen browsel met access.

Zie MSDN: How to: Deploy a SQL Server Compact Edition Database with an Application en dan "private file based deployment".

Vervolgens kun je de sdf gebruiken i.c.m. Entity Framework. :)

[ Voor 17% gewijzigd door mOrPhie op 12-04-2011 12:17 ]

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Verwijderd

Topicstarter
Oké nu heb ik mijn database aangemaakt in een sdf file. Hoe kan je die sdf file nu aanspreken vanuit de code?
Ik zie niet echt een voordeel tov een access database.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het lijkt me dat die database implementatie gewoon ruk is op jouw systeem, of je systeem zelf heeft kuren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op dinsdag 12 april 2011 @ 12:33:
Oké nu heb ik mijn database aangemaakt in een sdf file. Hoe kan je die sdf file nu aanspreken vanuit de code?
Ik zie niet echt een voordeel tov een access database.
Zodra je applicatie qua gebruik uit het Mickey Mouse stadium is zul je de verschillen heel rap merken.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Verwijderd schreef op dinsdag 12 april 2011 @ 12:33:
Oké nu heb ik mijn database aangemaakt in een sdf file. Hoe kan je die sdf file nu aanspreken vanuit de code?
Ik zie niet echt een voordeel tov een access database.
Beetje eigen inzet mag best?

http://www.google.com/sea...official&client=firefox-a

[ Voor 4% gewijzigd door mOrPhie op 12-04-2011 13:12 ]

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 22-11 23:02
Verwijderd schreef op dinsdag 12 april 2011 @ 11:41:
Ik ben toch serieus gek aan het worden.

dit werkt niet:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public static List<IHost> getHosts()
        {
            List<IHost> hosts = new List<IHost>();

            string comm = "SELECT * FROM Hosts";

            DataSet DS = _db.RetrieveSql(comm, null);
            DataTable myDT = new DataTable();
            myDT = DS.Tables[0];
            foreach (DataRow row in myDT.Rows)
            {
                IHost h;

                switch (row["type"].ToString())
                {
                    case "Amazon":
                        h = new AWSHost("eu-west-1", "AKIAJFK6HC6VAKDFE***", "d3+OKRn5tt4ic5peVayVt+iES3bcJCcn8irwz***");
                        break;
                    case "VMWare":
                        h = new VMWareHost("https://192.168.36.184/sdk", "Administrator", "Test1");
                        break;
                    default:
                        h = null;
                        break;
                }

                hosts.Add(h);
            }

            return hosts;
        }

De default case wordt voor de duidelijkheid niet aangesproken.
Het is misschien niet direct de oplossing voor je probleem maar als je een switch gebruikt i.c.m. een string is het goed om na te denken over je casing. Best practice is om er of een enum van te maken of alles lowercase te behandelen.

http://hawvie.deviantart.com/


  • epic007
  • Registratie: Februari 2004
  • Laatst online: 17-11 15:31
Verwijderd schreef op dinsdag 12 april 2011 @ 11:41:
Ik ben toch serieus gek aan het worden.

dit werkt niet:
....
Ik zie wel een paar vage dingetjes in je code:

C#:
1
2
3
4
5
6
            DataSet DS = _db.RetrieveSql(comm, null);
            DataTable myDT = new DataTable();
            myDT = DS.Tables[0];

            // kan zo ?
            DataTable myDT = DS.Tables[0];

de 'new' is hier waarschijnlijk niet nodig omdat je myDT een regel later alweer opniew assigned. En weet je zeker dat 'DS.Tables[0]' bestaat ? (Een check op DS.Tables.count o.i.d)


C#:
1
2
3
4
5
6
7
                ...
                    default:
                        h = null;
                        break;
                }

                hosts.Add(h);

hier kan het voorkomen dat je een heleboel 'null' elementen toevoegd aan je List. Misschien dat je code daarom later vaag doet ?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hoewel je valide punten aanhaalt verklaart geen van die punten de symptomen die de TS ziet.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Die zou ik alleen gebruiken als ik op een mobile device develop. Waarom jezelf beperken met de feature set?
SQL Express is juist vrijgegeven om een antwoord hierop te hebben. Als het niet nodig is wijk ik liever niet af van de fatsoenlijk ondersteunde standaard. Bij SQL Express kun je altijd nog een ticket Connect inschieten als je er niet uit komt, en nog belangrijker, het gedrag komt overeen met dat van een reguliere SQL Server. En je kunt makkelijk upgraden wanneer je express DB uit de klauwen begint te lopen.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Topicstarter
En het probleem is opgelost. Ik maak nu gebruik van een local database (sdf) met het Entity Framework. Dit is inderdaad een veel beter oplossing dan de access database. Nu heb ik wel nog steeds nog een tussenliggende laag tussen m'n applicatie en het Entity Framework. Is het de bedoeling dat die er is of kan je die nog elimineren?

Ik bedoel dus kan je dit nog ergens in het Entity framework implementeren zodanig dat je direct het juiste object krijgt?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        public static List<IHost> getHosts()
        {
            List<IHost> hosts = new List<IHost>();

            foreach (DBHost host in db.Hosts )
            {
                IHost h;

                switch (host.type)
                {
                    case "AWSHost":
                        h = new AWSHost(host.hostname, host.username, host.password);
                        break;
                    case "VMWareHost":
                        h = new VMWareHost(host.hostname, host.username, host.password);
                        break;
                    default:
                        h = null;
                        break;
                }

                h.Name = host.naam;

                hosts.Add(h);
            }

            return hosts;
        }

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 23-11 19:04

Sebazzz

3dp

Grijze Vos schreef op dinsdag 12 april 2011 @ 15:38:
[...]

Die zou ik alleen gebruiken als ik op een mobile device develop. Waarom jezelf beperken met de feature set?
Compact is allang niet meer puur voor mobile development. Microsoft pushed zelfs SQL Compact voor webdevelopment. SQL Compact is dé concurrent voor SQLite.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Verwijderd schreef op dinsdag 12 april 2011 @ 18:25:
En het probleem is opgelost. Ik maak nu gebruik van een local database (sdf) met het Entity Framework.
d:)b
Ik bedoel dus kan je dit nog ergens in het Entity framework implementeren zodanig dat je direct het juiste object krijgt?
Ik raad je aan je gewoon even in te lezen in de vele tutorials die er zijn. Als iets specifieks niet lukt kun je altijd nog terug komen met een vraag.

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 24-11 18:49
Verwijderd schreef op dinsdag 12 april 2011 @ 18:25:
Nu heb ik wel nog steeds nog een tussenliggende laag tussen m'n applicatie en het Entity Framework. Is het de bedoeling dat die er is of kan je die nog elimineren?
Queryen is gewoon met LINQ to Entities goed te doen. Daar heb je verder niet veel extra's voor nodig. Je wilt misschien alleen wel opletten wat voor SQL de EF LINQ provider aan het genereren is. In sommige gevallen kan dat inefficient worden.

Neemt niet weg overigens, dat het architectureel gezien is een goede beslissing blijft om data access logica onder te brengen in geisoleerde repository classes. Daarbij hoef je niet enkel aan simpele 'get by id' operaties te denken.

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 23-11 19:04

Sebazzz

3dp

R4gnax schreef op dinsdag 12 april 2011 @ 20:18:
[...]

Neemt niet weg overigens, dat het architectureel gezien is een goede beslissing blijft om data access logica onder te brengen in geisoleerde repository classes. Daarbij hoef je niet enkel aan simpele 'get by id' operaties te denken.
En mocht EF te langzaam blijken in de toekomst, kan je omdat je al een repository class hebt zelf de queries samenstellen en uitvoeren en objecten maken.

Overigens denk ik niet dat dit snel gebeurt, O/R mappers zijn nog redelijk efficient. StackOverflow maakt bijvoorbeeld gebruik van Linq2SQL.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Sebazzz schreef op woensdag 13 april 2011 @ 10:41:
[...]

En mocht EF te langzaam blijken in de toekomst, kan je omdat je al een repository class hebt zelf de queries samenstellen en uitvoeren en objecten maken.

Overigens denk ik niet dat dit snel gebeurt, O/R mappers zijn nog redelijk efficient. StackOverflow maakt bijvoorbeeld gebruik van Linq2SQL.
Linq2Sql ondersteunt alleen geen SQL Compact, dus dat is voor de TS niet echt een optie, aangezien hij een makkelijk te distribueren database wil. Overigens is Linq2Sql wel efficienter dan EF, maar dat is ook omdat Linq2Sql veel minder features ondersteunt.

Verder ben ik het met je eens. Ik gebruik Linq2Sql ook met veel plezier. :)

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.

Pagina: 1