C# LINQ EntityDataModell(ObjectContext) Update?

C# LINQ EntityDataModell(ObjectContext) Update?
2012-04-22T17:06:57+02:00
2012-04-23T08:20:01+02:00
2022-11-25T11:41:54+01:00
szblb
Akárhogy próbálkozok egyszerűen nem tudom elérni azt, hogy updateljem az adatbázist. A létező összes megoldást kipróbáltam, amit az interneten találtam de egyik se jó...


Runes_Users update = db.Runes_Users.First(p => p.Username=="kistaki01"); update.Username = "asd"; db.SaveChanges();


Runes_Users update = (from x in db.Runes_Users where x.Username == "kistaki01" select x).First(); update.Username = "asd"; db.SaveChanges();

Volt itt már egy hasonló kérdés:


BindingSource bs = new BindingSource(); try { var q1 = from x in db.Runes_Users where x.Username == "kistaki01" select x; bs.DataSource = q1; for (int i = 0; i < bs.List.Count; i++) { Runes_Users lv = db.Runes_Users.Single((g => g.Username == "kistaki01")); lv.Username = "asd"; db.SaveChanges(); //itt eredetile db.SubmitChanges volt... } } catch { }

Mostanában kezdtem el LINqval foglalkozni, úgyhogy elég új, légyszi segítsetek fontos lenne, kösz
Mutasd a teljes hozzászólást!
Először is: First() helyett ilyen esetben használd a Single()-t, mivel a First() több rekordból adja vissza az elsőt, míg a Single() pontosan egy rekordot vár és exception-t dob, ha nem pontosan egyet kap.

var user = (from x in db.Runes_Users where x.Username == "kistaki01" select x).Single();

Aztán, miután megvan a kívánt rekordod, Attach-olnod kell az adatbázishoz:

db.Runes_Users.Attach(user);

Utána mehet az update:

user.Username = "asd";

Végül a mentés:

db.SaveChanges();

Tehát a teljes frissítési kód:

var user = (from x in db.Runes_Users where x.Username == "kistaki01" select x).Single(); db.Runes_Users.Attach(user); user.Username = "asd"; db.SaveChanges();

A neveket megváltoztattam, hogy tisztábban látszódjon a folyamat.

Ami az adatbázis szerkezetet illeti: a Username ugye mindenképpen legyen Primary Key, de talán még jobb lenne, ha a PK-d egy int lenne, a Username-ed pedig egy unique mező. A bejelentkezéskor rákeresel a Username-re, onnan kezdve pedig a user PK ID-ját int-ként kezeled egy string helyett minden műveletnél.

Ez a megoldás szvsz gyorsabb és optimálisabb, főleg nagyobb terhelés esetén.
Mutasd a teljes hozzászólást!

  • Mutasd a teljes hozzászólást!
  • Először is: First() helyett ilyen esetben használd a Single()-t, mivel a First() több rekordból adja vissza az elsőt, míg a Single() pontosan egy rekordot vár és exception-t dob, ha nem pontosan egyet kap.

    var user = (from x in db.Runes_Users where x.Username == "kistaki01" select x).Single();

    Aztán, miután megvan a kívánt rekordod, Attach-olnod kell az adatbázishoz:

    db.Runes_Users.Attach(user);

    Utána mehet az update:

    user.Username = "asd";

    Végül a mentés:

    db.SaveChanges();

    Tehát a teljes frissítési kód:

    var user = (from x in db.Runes_Users where x.Username == "kistaki01" select x).Single(); db.Runes_Users.Attach(user); user.Username = "asd"; db.SaveChanges();

    A neveket megváltoztattam, hogy tisztábban látszódjon a folyamat.

    Ami az adatbázis szerkezetet illeti: a Username ugye mindenképpen legyen Primary Key, de talán még jobb lenne, ha a PK-d egy int lenne, a Username-ed pedig egy unique mező. A bejelentkezéskor rákeresel a Username-re, onnan kezdve pedig a user PK ID-ját int-ként kezeled egy string helyett minden műveletnél.

    Ez a megoldás szvsz gyorsabb és optimálisabb, főleg nagyobb terhelés esetén.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd