Le problème est que vos entités Person sont toujours attachées au contexte créé dans GetPersons. Si vous voulez travailler avec des entités attachées, vous devez utiliser la même instance de contexte dans les opérations select et update. Vous avez deux choix pour résoudre votre problème.
1) traitées correctement entités attachées
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) Ne pas utiliser des entités attachées
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();
}
}
}
Merci beaucoup 'Ladislav Mrnka. Je vais essayer les choses que vous avez dites. (je suis incapable de faire cela maintenant, ici) – losingsleeep
+1 Merci, a travaillé comme un charme. –
pouvez-vous faire cela de telle sorte que vous modifiez seulement un champ, et créez une entité fictive à attacher avec seulement la clé primaire et le champ unique pour modifier l'ensemble? – Maslow