Originariamente inviato da cassano
Ma chiedo non esiste la possibilità di fare delle query sulle entity che ancora non sono state salvate sul DB ?
Per esempio coi dataset , una volta aggiunto un record e prima di salvarlo sul db, potevi fare un ciclo al suo interno per vedere se alcuni record erano già presenti.
Insomma era come avere un db ma in memoria.
Ma certo che si!
esattamente come ti ho scritto nel mio post precedente...
diciamo che l'esempio l'avresti dovuto fare tu con il tuo codice, anche per capire le cose importanti che ti ho chiesto prima e alle quali non hai risposto... in ogni caso ti posto un esempio banale :
Model.cs
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace ConsoleApplication1
{
public class DB : DbContext
{
public DB()
: base("name=DBModel")
{ }
public DbSet<FileTXT> Files { get; set; }
}
public class FileTXT
{
public int ID { get; set; }
public string Text { get; set; }
}
}
Program.cs
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
FileTXT[] Files = new FileTXT[]
{
new FileTXT() { Text = "AAAjjansndfn" },
new FileTXT() { Text = "AAAjjansndfn12" },
new FileTXT() { Text = "AAAjjansndfn" },
new FileTXT() { Text = "AAAjjansndfn23" },
new FileTXT() { Text = "AAAjjansndfn" },
new FileTXT() { Text = "AAAjjansndfn12" }
};
using (DB db = new DB())
{
//con questo carico le entità nella lista Local (se le voglio...)
db.Files.Load();
//diversamente, se voglio controllare eventuali doppioni SOLO tra
//quelle non ancora salvate, posso non far caricare le entità
//(tolgo db.Files.Load())
//MA ATTENZIONE : in questo caso una volta che chiamo la lista (non Local, quindi db.Files.Any ad esempio)
//automaticamente verranno caricate tutte le entità nella Local (già salvate e non)
//quindi se sei interessato al controllo delle sole entità non salvate conviene
//distinguerle dall'ID (salvate >0, non salvate<1)
Files.ToList().ForEach(file=>//controllo eventuali doppioni tra tutte
{
if (!db.Files.Local.Any(a => a.Text == file.Text)) db.Files.Add(file);
});
//EDIT ERRORE :fagiano:
db.SaveChanges();
}
}
}
}
in questo caso, come prova di concetto, prima di aggiungere un entità controllo che questa non abbia la proprietà Text uguale a qualche altra già in memoria, se non c'è l'aggiungo, ma il controllo lo avrei potuto fare anche alla fine con tutte le entità aggiunte, quelle doppie le elimino. Solo alla fine salvo nel DB (.SaveChanges(); ).