Avatar billede CodingJoe Nybegynder
28. april 2013 - 09:18 Der er 3 kommentarer og
1 løsning

Problemer med delegates inde i en using { } block

Jeg har problemer ved at gøre brug af delegate funktioner inde i en using block:

Jeg har fx. følgende scenarie:
using (var mycontext = new MyEntityFrameworkEntities())
    {
        result = Agent.RetrieveData(Name.ToString(), () => context.persons.Where(m => m.Id == myId).Select(v => new Person
        {
            Id = v.Id,
            Birthdate = v.Birthdate,
            Name = v.Name
        }).ToList());
    }

Så brokker resharper sig om at 'mycontext' -> 'Access to disposed closure'.
---------------------------------------------------------
Gør jeg følgende, så er alt ok ift. resharper, men det er jo lidt snyd, og så hjælper en using statement mig ikke så meget:

using (var context = new MyEntityFrameworkEntities())
    {
        var myContext = context; // <-- bruger en
        result = Agent.RetrieveData(Name.ToString(), () => myContext.persons.Where(m => m.Id == myId).Select(v => new Person
        {
            Id = v.Id,
            Birthdate = v.Birthdate,
            Name = v.Name
        }).ToList());
    }
---------------------------------------------------------

Hvad bør jeg gøre i denne situation. Inde i min delegate håndterer, jeg nogle andre ting, som jeg ikke vil lave om på.
Avatar billede CodingJoe Nybegynder
28. april 2013 - 09:22 #1
Tror denne tråd på stackoverflow beskriver nogenlunde det samme problem hos mig.

http://stackoverflow.com/questions/14218907/does-this-resharper-fix-for-disposed-closure-warning-make-any-sense
Avatar billede janus_007 Nybegynder
28. april 2013 - 14:56 #2
Jeg synes ikke at kunne se at du bruger mycontext i dit udtræk?

using (var mycontext = new MyEntityFrameworkEntities())
    {
        result = Agent.RetrieveData(Name.ToString(), () => context.persons.Where(m => m.Id == myId).Select(v => new Person
        {
            Id = v.Id,
            Birthdate = v.Birthdate,
            Name = v.Name
        }).ToList());
    }
Avatar billede CodingJoe Nybegynder
28. april 2013 - 15:30 #3
Copy paste detalje.

Mit context objekt hedder 'context' hele vejen igennem. Så 'myContext' skal erstattes med 'context'.

Advarslen fra resharper er stadigvæk aktuel, men jeg har læst mig frem til, at resharper ikke kan afgøre om det er et problem, da udvikleren bedst kender koden, og i dette tilfælde, er der tale om en overanalysering.
Avatar billede CodingJoe Nybegynder
04. maj 2013 - 22:12 #4
Lukker denne...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester