Il problema è che le entità Persona sono ancora collegate al contesto creato in GetPersons. Se si desidera lavorare con entità collegate, è necessario utilizzare la stessa istanza di contesto sia nelle operazioni di selezione che di aggiornamento. Hai due opzioni per risolvere il tuo problema.
1) Le persone collegate correttamente gestite
public class Program
{
[STAThread]
static void main()
{
using (DataAccessClass dal = new DataAccessClass())
{
List<Person> list = dal.GetPersons();
Person p = list[0];
p.LastName = "Changed!";
dal.Save();
}
}
}
public class DataAccessClass : IDisposable
{
private MyDBEntities _context = new MyDBEntities();
public List<Person> GetPersons()
{
return _context.Persons.ToList();
}
public void Save()
{
// Context tracks changes on your entities. You don't have to do anything. Simply call
// SaveChanges and all changes in all loaded entities will be done in DB.
_context.SaveChanges();
}
public void Dispose()
{
if (_context != null)
{
_context.Dispose();
_context = null;
}
}
}
2) Non usare le entità collegate
public class Program
{
[STAThread]
static void main()
{
DataAccessClass dal = new DataAccessClass())
List<Person> list = DataAccessClass.GetPersons();
Person p = list[0];
p.LastName = "Changed!";
dal.Update(p);
}
}
public class DataAccessClass
{
public static List<Person> GetPersons()
{
// Closing context will detach entities
using (MyDBEntities context = new MyDBEntities())
{
return context.Persons.ToList();
}
}
public void Update(Person p)
{
using (MyDBEntities context = new MyDBEntities())
{
context.Persons.Attach(p);
// Detached entities don't track changes so after attaching you have to say
// what changes have been done
context.ObjectStateManager.ChangeObjectState(p, System.Data.EntityState.Modified);
context.SaveChanges();
}
}
}
fonte
2010-08-29 11:54:05
La ringrazio molto 'Ladislav Mrnka'. proverò le cose che hai detto. (non sono in grado di farlo ora, qui) – losingsleeep
+1 Grazie, ha funzionato come un fascino. –
puoi farlo in modo tale da modificare solo un campo e creare un'entità fittizia da collegare con solo la chiave primaria e il campo da modificare? – Maslow