Объект с ключом, который совпадает с ключом предоставленного объекта, не может быть найден в ObjectStateManager - PullRequest
0 голосов
/ 15 декабря 2011

Я хочу обновить запись с FormView на ObjectDataSource и потерять свой день, чтобы решить эту ошибку.

Объект с ключом, который совпадает с ключом предоставленного объекта, не можетнайдено в ObjectStateManager.Убедитесь, что значения ключей предоставленного объекта соответствуют значениям ключей объекта, к которому должны применяться изменения.

Мой код ниже

private static Entities1 _db = null;

public static Entities1 CreateDataContext()
{
    if (_db == null)
    {
        _db = new Entities1(System.Configuration.ConfigurationManager.ConnectionStrings["Entities1"].ConnectionString);
        _db.games.MergeOption = MergeOption.NoTracking;
        _db.my_aspnet_users.MergeOption = MergeOption.NoTracking;
        _db.platforms.MergeOption = MergeOption.NoTracking;
    }
    return _db;
}

public void Update(game item)
{
    Entities1 DB = CreateDataContext();
    item.modified = DateTime.Now;
    var obj = (from u in DB.games
               where u.idgames == item.idgames
               select u).First();
    DB.games.ApplyCurrentValues(item);//Error Here
    DB.SaveChanges();         
}

1 Ответ

6 голосов
/ 15 декабря 2011

В вашем методе:

public void Update(game item)
{
    Entities1 DB = CreateDataContext();
    item.modified = DateTime.Now;
    var obj = (from u in DB.games
               where u.idgames == item.idgames
               select u).First();
    DB.games.ApplyCurrentValues(item);//Error Here
    DB.SaveChanges();         
}

item не прикреплено, поэтому его нельзя обновить. Это почти то же самое, что и сообщение об ошибке.

Похоже, вы хотите использовать obj, который извлекается из вашего контекста. Затем установите значения obj равными item и используйте obj для обновления.

РЕДАКТИРОВАТЬ для образца ...

Если вы просто хотите установить измененную дату и время, вы должны сделать это:

public void Update(game item) {
    Entities1 DB = CreateDataContext();

    var obj = (from u in DB.games
               where u.idgames == item.idgames
               select u).SingleOrDefault();
    if (obj == null) {
      // handle the case where obj isn't found
      // probably by throwing an exception
    }

    obj.modified = DateTime.Now;
    DB.games.ApplyCurrentValues(obj);
    DB.SaveChanges(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...