C#, LINQ, går ej ta bort en rad i databasen

Trädvy Permalänk
Medlem
Plats
Sjötofta
Registrerad
Jan 2009

C#, LINQ, går ej ta bort en rad i databasen

Hej sitter och gör en konsoll-applikation där man kan lägga till, lista, ta bort och ändra folk i en databas. Jag har kommit till att ta bort.
Har gjort denna metoden:

public static void deleteTraveller(int delTra) { using (var db = new oosu21711Entities()) { TravellerSet Traveller = new TravellerSet(); var deletetraveller = from b in db.TravellerSet where b.TravellerID == delTra select b; db.TravellerSet.Attach(Traveller); db.TravellerSet.Remove(Traveller); Console.WriteLine("\nSaving Changes!"); db.SaveChanges(); } }

Men jag får följande fel efter "db.SaveChanges();":
An unhandled exception of type 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' occurred in EntityFramework.dll

Additional information: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.

Har googlat en del men inte fått något vettigt svar på hur jag ska lösa detta. Värt att veta är att jag inte är någon expert på C# utan är en nybörjare.
Tack på förhand
Mvh Johan

Fractal Design Define R3 | Dell UltraSharp 23'' U2311H IPS | ASUS P8P67 Pro Rev 3.1 | XFX Radeon HD 6950 2GB | Intel Core i5 2500k | Corsair VENGEANCE CL9 1600mhz (2x4096MB) | Corsair HX 750w | 60GB OCZ Agility 3 SSD | 2x Samsung Spinpoint F3 1TB | QpaD MK90 | Logitech G500 | Logitech G930

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006

Utan att veta vad dit TravellerSet hittar på när man kallar på attach och remove går det väl inte att säga så hemskt mkt.

Vad kallar det på för metoder?

Trädvy Permalänk
Medlem
Plats
Sjötofta
Registrerad
Jan 2009
Skrivet av Killbom:

Utan att veta vad dit TravellerSet hittar på när man kallar på attach och remove går det väl inte att säga så hemskt mkt.

Vad kallar det på för metoder?

TravellerSet är helt enkelt tabellen i databasen som jag vill kunna ta bort rader ur.

Fractal Design Define R3 | Dell UltraSharp 23'' U2311H IPS | ASUS P8P67 Pro Rev 3.1 | XFX Radeon HD 6950 2GB | Intel Core i5 2500k | Corsair VENGEANCE CL9 1600mhz (2x4096MB) | Corsair HX 750w | 60GB OCZ Agility 3 SSD | 2x Samsung Spinpoint F3 1TB | QpaD MK90 | Logitech G500 | Logitech G930

Trädvy Permalänk
Medlem
Registrerad
Aug 2010
Skrivet av J0hAnN48:

Hej sitter och gör en konsoll-applikation där man kan lägga till, lista, ta bort och ändra folk i en databas. Jag har kommit till att ta bort.
Har gjort denna metoden:

public static void deleteTraveller(int delTra) { using (var db = new oosu21711Entities()) { TravellerSet Traveller = new TravellerSet(); var deletetraveller = from b in db.TravellerSet where b.TravellerID == delTra select b; db.TravellerSet.Attach(Traveller); db.TravellerSet.Remove(Traveller); Console.WriteLine("\nSaving Changes!"); db.SaveChanges(); } }

Men jag får följande fel efter "db.SaveChanges();":
An unhandled exception of type 'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException' occurred in EntityFramework.dll

Additional information: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=472540 for information on understanding and handling optimistic concurrency exceptions.

Har googlat en del men inte fått något vettigt svar på hur jag ska lösa detta. Värt att veta är att jag inte är någon expert på C# utan är en nybörjare.
Tack på förhand
Mvh Johan

Fundera på vad traveller har för värden...

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006
Skrivet av J0hAnN48:

TravellerSet är helt enkelt tabellen i databasen som jag vill kunna ta bort rader ur.

Det är också en kall som troligtvis ärver av något annat. Jag vet inte vad som händer när du kör "Attach()" och "Remove()"

Är det något i stil med deleteOnSubmit() eller vad?

Trädvy Permalänk
Medlem
Registrerad
Jan 2017

Hej!
Är dålig på DB & entityFramework, men nedan följer några tankar bara.

Så db.SaveChanges() går bra?
Kan ju vara något som sker när db går out of scope, (using tar slut).
Varför används inte deletetraveller variabeln? Är det bara att du testar att köra attach & remove på en lokal variabel? (Traveller).
Behöver man kanske köra save mellan en attach & en remove?

Trädvy Permalänk
Medlem
Plats
Sjötofta
Registrerad
Jan 2009
Skrivet av Tickles:

Fundera på vad traveller har för värden...

Hur menar du nu?

Fractal Design Define R3 | Dell UltraSharp 23'' U2311H IPS | ASUS P8P67 Pro Rev 3.1 | XFX Radeon HD 6950 2GB | Intel Core i5 2500k | Corsair VENGEANCE CL9 1600mhz (2x4096MB) | Corsair HX 750w | 60GB OCZ Agility 3 SSD | 2x Samsung Spinpoint F3 1TB | QpaD MK90 | Logitech G500 | Logitech G930

Trädvy Permalänk
Medlem
Registrerad
Aug 2010

@J0hAnN48:

Vad händer om du attachar ett objekt utan värden och försöker att ta bort det?

Hint! Du hämtar upp data som är onödig i enlighet med det sätt som du använder dig av ☺️

Hint2! Vad använder du deletetraveller till?

Trädvy Permalänk
Medlem
Plats
Sjötofta
Registrerad
Jan 2009
Skrivet av Tickles:

@J0hAnN48:

Vad händer om du attachar ett objekt utan värden och försöker att ta bort det?

Hint! Du hämtar upp data som är onödig i enlighet med det sätt som du använder dig av ☺️

Hint2! Vad använder du deletetraveller till?

Ah nu ser jag att jag aldrig tilldelar några värden till Traveller. Frågan är då hur jag gör det?

Fractal Design Define R3 | Dell UltraSharp 23'' U2311H IPS | ASUS P8P67 Pro Rev 3.1 | XFX Radeon HD 6950 2GB | Intel Core i5 2500k | Corsair VENGEANCE CL9 1600mhz (2x4096MB) | Corsair HX 750w | 60GB OCZ Agility 3 SSD | 2x Samsung Spinpoint F3 1TB | QpaD MK90 | Logitech G500 | Logitech G930

Trädvy Permalänk
Medlem
Registrerad
Aug 2010
Skrivet av J0hAnN48:

Ah nu ser jag att jag aldrig tilldelar några värden till Traveller. Frågan är då hur jag gör det?

Vet du vilken version av EF samt .NET du använder? Vilka variabler finns i klassen?

Trädvy Permalänk
Medlem
Plats
Sjötofta
Registrerad
Jan 2009
Skrivet av Tickles:

Vet du vilken version av EF samt .NET du använder? Vilka variabler finns i klassen?

.NET version 4.6 och EF version 6.1.3.
Dessa variabler finns:
public static string name;
public static string adress;
public static string city;
public static int postal;
public static string country;
public static int phone;

Fractal Design Define R3 | Dell UltraSharp 23'' U2311H IPS | ASUS P8P67 Pro Rev 3.1 | XFX Radeon HD 6950 2GB | Intel Core i5 2500k | Corsair VENGEANCE CL9 1600mhz (2x4096MB) | Corsair HX 750w | 60GB OCZ Agility 3 SSD | 2x Samsung Spinpoint F3 1TB | QpaD MK90 | Logitech G500 | Logitech G930

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

Känns som lite konstig logik där, varför skapar du ett TravellerSet och försöker köra Attach på den ?

Rimligtvis ska du deleta det objekt som matchar, alltså

public static void deleteTraveller(int delTra) { using (var db = new oosu21711Entities()) { var deletetraveller = (from b in db.TravellerSet where b.TravellerID == delTra select b).SingleOrDefault(); if(deletetraveller != null) { db.TravellerSet.Remove(deletetraveller); Console.WriteLine("\nSaving Changes!"); db.SaveChanges(); } } }

Trädvy Permalänk
Medlem
Plats
Sjötofta
Registrerad
Jan 2009
Skrivet av kyuw:

Känns som lite konstig logik där, varför skapar du ett TravellerSet och försöker köra Attach på den ?

Rimligtvis ska du deleta det objekt som matchar, alltså

public static void deleteTraveller(int delTra) { using (var db = new oosu21711Entities()) { var deletetraveller = (from b in db.TravellerSet where b.TravellerID == delTra select b).SingleOrDefault(); if(deletetraveller != null) { db.TravellerSet.Remove(deletetraveller); Console.WriteLine("\nSaving Changes!"); db.SaveChanges(); } } }

Tack! Som sagt är rätt noob så har inte alltid logiken med mig.

Fractal Design Define R3 | Dell UltraSharp 23'' U2311H IPS | ASUS P8P67 Pro Rev 3.1 | XFX Radeon HD 6950 2GB | Intel Core i5 2500k | Corsair VENGEANCE CL9 1600mhz (2x4096MB) | Corsair HX 750w | 60GB OCZ Agility 3 SSD | 2x Samsung Spinpoint F3 1TB | QpaD MK90 | Logitech G500 | Logitech G930

Trädvy Permalänk
Medlem
Registrerad
Aug 2010
Skrivet av kyuw:

Känns som lite konstig logik där, varför skapar du ett TravellerSet och försöker köra Attach på den ?

Rimligtvis ska du deleta det objekt som matchar, alltså

public static void deleteTraveller(int delTra) { using (var db = new oosu21711Entities()) { var deletetraveller = (from b in db.TravellerSet where b.TravellerID == delTra select b).SingleOrDefault(); if(deletetraveller != null) { db.TravellerSet.Remove(deletetraveller); Console.WriteLine("\nSaving Changes!"); db.SaveChanges(); } } }

Lära sig att lösa problem 0
Björntjänst 1

Trädvy Permalänk
Medlem
Registrerad
Nov 2016
Skrivet av Tickles:

Lära sig att lösa problem 0
Björntjänst 1

Jag har inget emot om han lär sig vad koden gör.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av kyuw:

Besserwisser 1

Vad fick jag poäng för?

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Registrerad
Aug 2010
Skrivet av kyuw:

Jag har inget emot om han lär sig vad koden gör.

Absolut finns det inga problem med det. Ur lärosynpunkt hade det varit bättre att kanske länka eller hänvisa hen till någon form av underlag då hen inte riktigt hade koll på en del grunder. Får man saker serverat så lär man sig inte varför och kommer då ha svårt med de lite mer avancerade uppgifterna. Det är därför jag med fler aldrig utför uppgiften åt någon annan. Att agera stöd är bättre ☺️