Sidder og skriver på et lille jukebox projekt, i den forbindelse bruger jeg LINQ to SQL til at gemme sang informationer, stier, covers osv i en SQL 2008 database. Jeg har lavet en import funktion, og en cancel funktion til denne, men hvis jeg canceller så er der jo stadig nogle sang informationer der er gemt i databasen, kan jeg på nogen måde lave en rollback så de gemte bliver "rolled back" ?
Problemet ligger i at jeg kalder submitChanges for hver sang jeg har "behandlet".. Har lavet det om så jeg først kalder submitChanges når alle sange er behandlet.. Ved ikke lige hvem der skal have point her, i kan evt dele ?
Eller, det løste ikke problemet, for jeg tjekker om jeg har oprettet det album jeg prøvet at gemme, men så længe jeg ikke har kaldt submitchanges er de jo ikke oprettet, og jeg får så oprettet et album pr sang på albummet.
Men det løser vel ikke det problem at han vil kunne lave en rollback af mere end bare det.
Han tilføjer jo en masse data ...
Men måske bare hans logik omkring det skal laves lidt om, så det først smides ind, når man er 100% sikker på at der ikke er mere data, så er det jo nemt at lave en rollback, da man ikke har tilføjet noget endnu ...
Her kommer det kode det drejer sig om. lille forklaring følger : Metoden CreateTrack bliver kaldt for hvert enkelt track i en given folder, den kalder så videre til CreateOrGetArtist og CreateOrGetAlbum for at enten at få den artist samt album det drejer sig om, eller oprette det. Problemet ligger i at jeg kalder Submitchanges() i slutningen af CreateTrack, det er som sådan også fint nok, bare ikke når jeg afbryder en import så er der jo stadig blevet indsat x antal records. Laver jeg en funktion så jeg kan kalde submitChanges når jeg ved der ikke er flere filer at importere så får jeg indsat både en album og en artist record pr gang jeg kalder Create track, og det var jo ikke meningen.
public Artist CreateOrGetArtist(JukeDataContext JukeContext, String artistName) { Artist artist = JukeContext.Artists.SingleOrDefault(a => a.Name.ToUpper() == artistName.ToUpper()); if (artist != null) { return artist; } artist = new Artist { Name = artistName };
public Album CreateOrGetAlbum(JukeDataContext JukeContext, String AlbumName) {
Album album = JukeContext.Albums.SingleOrDefault(ab => ab.Name.ToUpper() == AlbumName.ToUpper()); if (album != null) { return album; } album = new Album { Name = AlbumName }; JukeContext.Albums.InsertOnSubmit(album);
return album; }
public void CreateTrack(String _trackName,String _artistName, String _albumName,uint _trackNumber, String _filePath, long _duration) { if(JukeContext == null) JukeContext = new JukeDataContext();
Fik løst det ved at lave en seperat metode til Submitchanges, og så tjekke i DataContext.GetChangeSet om der indsat et album med det navn jeg prøver indsætte..
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.