Avatar billede Newbee1 Novice
10. december 2013 - 08:57 Der er 6 kommentarer og
1 løsning

Opdatering MVC4 LINQ to SQL

Hej 

Jeg prøver at opdatere DB med:

db.DAT_SupplyCons.InsertOnSubmit(DAT_SupplyCon);
(LINQ to SQL)

Men istedet for en opdatering, kommer der en ny række og ny ID (Primary). Jeg har prøvet at lave et "hidden" felt for Primary i view, for at tvinge en opdatering igennem. Men alligevel kommer der en ny række.

Er der en erstatning for InsertOnSubmit, der kan opdatere, i LINQ to SQL ?

MVH

Tony
Avatar billede softspot Forsker
10. december 2013 - 11:17 #1
Du kan hente den eksisterende post i databasen og opdatere den, for til sidst at kalde db.SubmitChanges.

Dette kunne være et mønster for at oprette eller opdatere (alt efter om posten eksisterer i databasen eller ej):

var dbObj = db.DAT_SupplyCons.SingleOrDefault(o => o.Id == DAT_SupplyCon.Id);
if(dbObj == null)
{
    dbObj = new DAT_SupplyCon();
    db.DAT_SupplyCons.InsertOnSubmit(dbObj);
}

// opdater egenskaberne her...

db.SubmitChanges();


Der er også mulighed for at koble objektet på konteksten, hvis du arbejder med afkoblede objekter. Du kan læse mere om hvordan du skal håndtere dette (og andre scenarier ifm. CUD) her: msdn.microsoft.com/en-us/library/bb546187(v=vs.110).aspx
Avatar billede Newbee1 Novice
10. december 2013 - 13:08 #2
Hej softspot

Tak for dit svar.

Problemet er InsertOnSubmit i LINQ to SQL, ikke opdatere den eksisterne post, men opretter en ny post, så efter SubmitChanges, har jeg 2 poster, den der skulle opdateres, og en ny post.


    public ActionResult Edit(int id = 0)
    {
        DAT_SupplyCon SupplyCon = db.DAT_SupplyCons.Where(x => x.ID == id).FirstOrDefault();
        if (SupplyCon == null)
        {
            return HttpNotFound();
        }
        return View(SupplyCon);
    }

    //
    // POST: /Books/Edit/5
    [HttpPost]
    public ActionResult Edit(DAT_SupplyCon DAT_SupplyCon, HttpPostedFileBase file)
    {
        if (ModelState.IsValid)
        {
            // Delete old file
            FileUpload.DeleteFile(DAT_SupplyCon.PdfCon);



            // Upload our file
            DAT_SupplyCon.PdfCon = FileUpload.UploadFile(file);
  ????      db.DAT_SupplyCons.InsertOnSubmit(DAT_SupplyCon);
            db.SubmitChanges();
            return RedirectToAction("Index");
        }
        return View(DAT_SupplyCon);
    }


Jeg kunne godt tænke mig en erstatning for InsertOnSubmit.


MVH

Tony
Avatar billede softspot Forsker
10. december 2013 - 14:18 #3
Prøv evt. med nedenstående (læs evt. nærmere i det link jeg anviste tidligere):


    [HttpPost]
    public ActionResult Edit(
            DAT_SupplyCon DAT_SupplyCon,
            HttpPostedFileBase file)
    {
        if (ModelState.IsValid)
        {
            // Delete old file
            FileUpload.DeleteFile(DAT_SupplyCon.PdfCon);

            // Upload our file
            DAT_SupplyCon.PdfCon = FileUpload.UploadFile(file);

            db.DAT_SupplyCons.Attach(DAT_SupplyCon, false);

            db.SubmitChanges();

            return RedirectToAction("Index");
        }
        return View(DAT_SupplyCon);
    }
Avatar billede Newbee1 Novice
10. december 2013 - 17:19 #4
Hej


Det kommer ikke opdatering af DB



MVH


Tony
Avatar billede softspot Forsker
10. december 2013 - 17:48 #5
Kan du evt. prøve med nogle helt simple data?

Jeg er ikke klar over hvad FileUpload er for en størrelse og hvad UploadFile rent faktisk gør, så det er støj i denne sammenhæng (hvor det drejer sig om, at finde ud af, hvordan du får opdateret en "disconnected" post i din database).

Prøv evt. i første omgang, at undlade false-parameteren i kaldet til Attach og se om det gør nogen forskel (og hvis du ikke har gjort det endnu, læs og forstå den artikel jeg linkede til). Hvis det heller ikke fungerer, så isolér problemstillingen, så du ikke jagter spøgelser...
Avatar billede Newbee1 Novice
11. december 2013 - 13:42 #6
Hej Softspot


Jeg kan godt se at jeg skal arbejde videre med ATTACH.


Tak for din hjælp, kan jeg give dig point ?


MVH

Tony
Avatar billede softspot Forsker
11. december 2013 - 16:03 #7
Det kan du nu... :-)
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