Jeg har lavet en større web app som bruger Entity Framework 4. Jeg bruger et Context-per-request design som indtil nu har virket perfekt.
Nu har jeg lagt et cachinglag ind over de entiteter som bliver brugt hele tiden, men er løbet ind i nogle problemer.
Et eksempel: Alle brugere er cachet. Alle brugere har tildelt 0..n roller og denne rolle-navigation er inkluderet i de bruger objekter der er cachet.
Når jeg ønsker at tilføje en rolle til en person via en webform, så er det altså den cachede bruger der hentes ud i koden og der tilføjes en rolle som er i object context'en. Når jeg skal gemme brugeren, vil jeg så attache denne til context'en og markere den som modified. Her får jeg et problem, da EF nu brokker sig over, at der eksisterer roller som allerede er i contexten (hvilket også er sandt nok).
Hvordan kommer jeg udenom dette problem? Findes der en slags "AttachIfNotAlreadyAttached" metode eller en måde man kan se om en entitiet allerede er attached? Jeg ville helst undgå at skulle detache rollerne i web-formen, da caching laget gerne skulle være "gennemsigtigt" og ikke have indflydelse på koden...
Den er vel også attached ... dvs, den tror den er attached, men det er vel til en Context som ikke findes mere ... kan man ikke detach den inden du "cacher" den ?
Jeg detacher når jeg cacher.. Det er den rolle jeg add'er til User'ens collection den brokker sig over. For den rolle som tilføjes er i context'en når jeg prøver at attache User'en.
Har faktisk lige fundet ud af, at det er User-objektet fra cachen som bliver lagt i context'en automatisk, når man tilføjer en Rolle til User'en. ChangeTrackingen gør at det sker.
Så nu har jeg løst det problem - nu er mit andet problem, at når jeg kalder SaveChanges() på datacontext, bliver der nogle gange oprettet nye roller i databasen, selvom det eksisterer i forvejen! Går ud fra, at dens ChangeState er sat til Added eller lignende.
Men det lyder også mærkeligt, hvis key er sat ... så ville den jo lave ulykker da man ikke kan have samme key 2 gange.
EF4 er noget ... Arghhh, jeg er sådan så små startet på EF4 CodeFirst ... men ... jeg kan heldigvis hurtigt klar over til NHibernate hvis jeg skulle have brug for det.
mvh
Synes godt om
Ny brugerNybegynder
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.