Avatar billede p_gaard Juniormester
15. oktober 2018 - 17:19 Der er 2 kommentarer og
2 løsninger

Entity framework, klient modtager gammelt data

Hej, 

Jeg har en backend i entity framework med repository pattern samt unit of Work pattern.

Min frontend er WebForms (visual studio) som indlæser og sender json via ajax. Efter redigering af poster hos klient opdateres databasen fint, men det nyopdaterede data vises ikke hos klienten. Det gør det dog hvis jeg enten er heldig eller genstarter applikationen.

Repository, evt. her skal puttes noget ind:

        public virtual T Update(T entity)
        {
            this.context.LoadRequiredProperties<T>(entity).SaveChanges();
            this.context.SaveChanges();
            return entity;
        }

  Eller måske i AJAX skal problemet findes:

        $.getJSON("http://localhost:8080/api/tests?testStatusId="+gup("testStatusId")+"&projectId="+gup("project")+"&barcode",
            function (data) {
                $('#Analysis').empty(); // Clear the table body.

                // Loop through the list of Analysis.
                $.each(data, function (key, val) {
                  ......................................
                    $('<tr/>', { html: row })  // Append the name.
                        .appendTo($('#Analysis'));
                });
            });

Endelig kunne det være i controleren.

        [Route("status")]
        [HttpPut]
        public TestModel[] PutStatus(TestModel[] testData)
        {
            if (testData[0].StatusId == 3)
            {
                statusName = "APPROVED";
            }
            if (testData[0].StatusId == 4)
            {
                statusName = "FAILED";
            }
            return testData.Select(x =>
            {
                var xx = this.testService.Get(x.Id);
                return TestModel.Create(this.testService.Update(x.PutStatus(xx)), this.clientDateFormat);
            }).ToArray();
        }



En der kan hjælpe?

Mvh

Peter Krøll Korsgaard
Avatar billede softspot Forsker
15. oktober 2018 - 18:04 #1
Det første sted jeg ville kigge var på getJSON. Her forestiller jeg mig, at der foretages caching af det der hentes. Du skal nok kigge på at slå caching fra, enten ved at sætte et timestamp på din url, eller gøre det i jQuery.
Avatar billede arne_v Ekspert
15. oktober 2018 - 19:35 #2
Jeg synes at vi mangler en del brikker til puslespillet.

Vi har:
* oplysning om at der bruges ASP.NET web forms
* oplysning om at der sendes (PUT formoder vi) via AJAX
* ASP.NET Win API C# kode der vise at en put til /status vil gemme status
* JS kode som henter /test med query paa status

Det er helt uklart for mig hvordan PUT faktisk laves og hvordan de viste data burde opdateres.
16. oktober 2018 - 01:54 #3
i din kode, LUK forbindelsen til databasen, inden du åbner den.
så burde den levere nyeste data
Avatar billede p_gaard Juniormester
17. oktober 2018 - 00:55 #4
Hej,

Jeg har løst problemet ved at putte timestamp på URL'en i min ajax getAnalysis.

"&_="+Number(new Date())


    function getAnalysis() {
        $.getJSON("http://localhost:8080/api/tests?Barcode="+gup("Barcode")+"&_="+Number(new Date()),
            function (data) {
                $('#Analysis').empty(); // Clear the table body.
                // Loop through the list of Analysis.
                $.each(data, function (key, val) {
                    // Add a table row for the product.
                    var md = "onMouseOver=' $(document).ready(getAnalysis1(" + val.id + "));' ondblclick='setComment(123);'";
                    var row =
                        "<td style='width:200px' " + md + " >" + val.sampleBarcode + "</td>" +
                        "<td style='width:300px' " + md + ">" + val.timestamp + "</td'>" +
                        "<td style='width:200px' " + md + ">" + val.testResultTimestamp + "</td>" +
                        "<td style='width:300px' " + md + ">" + val.typeName + "</td>" +
                        "<td style='width:200px' " + md + ">" + val.statusName + "</td>" +
                        "<td style='width:100px;display:none;'>" + val.sampleId + "</td>" +
                        "<td style='width:100px;display:none;'>" + val.projectId + "</td>" +
                        "<td style='width:100px;display:none;'>" + val.orderId + "</td>" +
                        "<td style='width:100px;display:none;'>" + val.statusId + "</td>" +
                        "<td style='width:100px;display:none;' " + md + ">" + val.id + "</td>" +
                        "<td style='width:100px;' " + md + ">" + val.comment + " " + "</td>";
                    $('<tr/>', { html: row })  // Append the name.
                        .appendTo($('#Analysis'));
                });
            });
    }




    function postjson(ids, action) {
        var url;
        var type;
        if (action === "genkor")
        {
            url = 'http://localhost:8080/api/tests/rerun';
            type = 'POST';
        }
        if (action === "godkend")
        {
            url = 'http://localhost:8080/api/tests/status';
            type = 'PUT';
        }
        if (action === "fejlet")
        {
            url = 'http://localhost:8080/api/tests/status';
            type = 'PUT';
        }
        if (action === "raport")
        {
            var idx = [];
                var table = document.getElementById('Analysiscss');
                var id;
                var i = 0;
                var row;
                for (i = 0; row = table.rows[i]; i++)
                {
                    if ($(row).css('background-color') === 'rgb(144, 238, 144)')
                    {
                        idx[i]=id = row.cells[9].firstChild.nodeValue;
                    }
            }
            var chkLocalReport = document.getElementById('chkLocalReport').checked;
            var json = {"TestIds": idx, "isLocalReport": chkLocalReport };
            ids = json;
            url = 'http://localhost:8080/api/tests/reports';
            type = 'POST';
        }

Tak for hjælpen.

Mvh Peter
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

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





Premium
Sikkerhedsekspert: Derfor har Colonial været nødt til at betale hackere ransomware på 30 millioner kroner - vil sagtens kunne ske i Danmark
Interview: Hvorfor har mægtige Colonial Pipeline valgt at betale ransomware til hackere trods anbefalinger fra myndigheder og sikkerhedsmiljøet? "Det er ikke helt sort og hvidt," siger sikkerheds-ekspert Leif Jensen fra Eset.
Computerworld
Nye informationer om det største iPhone-hack nogensinde ser dagens lys: 128 millioner brugere blev ramt
Hidtil hemmeligholdte detaljer om verdens største iPhone-hack er kommet frem under retssagen mellem Apple og Epic Games. 128 millioner brugere blev ramt, og mere end 4.000 apps blev inficeret. Se detaljerne her.
CIO
Har du rost din mellemleder i dag? Snart er de uddøde - og det er et tab
Computerworld mener: Mellemledere lever livet farligt: Topledelsen får konstant ideer med skiftende hold i virkeligheden, og moden går mod flade agile organisationer. Men mellemlederen er en overset hverdagens helt med et kæmpe ansvar. Her er min hyldest til den ofte latterliggjorte mellemleder.
Job & Karriere
Eva Berneke stopper som topchef i KMD og flytter til Paris: Her er KMD's nye topchef
Efter syv år på posten som topchef for KMD forlader Eva Berneke selskabet. Nu flytter hun med familien til Paris, hvor hun vil fortsætte sit bestyrelsesarbejde. KMD har allerede afløser på plads.
White paper
Sådan sikrer du hovednøglen til jeres data
80% af alle ransomwareangreb skyldes misbrug af privilegerede brugeradgange. Ved at begrænse og overvåge adfærden på de privilegerede konti samt kontrollere mængden af tildelte rettigheder kan du mindske skaden ved hackerangreb mod din virksomhed og i visse tilfælde helt blokere dem. Internt kan du bruge kontrollen med brugeradgange til at dokumentere, hvem der bevæger sig i hvilke systemer, og hvad der foregår derinde. Privilegeret brugerstyring har de seneste to år stået øverst på Gartners Top10-liste over it-sikkerhedsprojekter, der bør få højeste prioritet. Alligevel er teknologien kun så småt ved at finde fodfæste i Danmark. Det kan viden om åbenlyse gevinster, relativ kort implementeringstid og yderst rimeligt budget være med til at ændre på. I dette whitepaper folder vi temaet privilegeret brugerstyring ud og placerer teknologien i det væld af prioriteringer, som CISO’en hver dag skal foretage.