Эта ошибка является побочным эффектом оптимистичного параллелизма Entity Framework .
В принципе, кто-то другой мог удалить запись между вами, когда вы ее извлекали. Или, может быть, вы сделали что-то с сущностью до этого кода.
Попробуйте запустить его в изолированной среде (например, в модульном тесте), чтобы убедиться, что проблема все еще возникает.
Да, вы можете проигнорировать и снова получить запись, или вы можете использовать ObjectContext.Refresh :
public static void DeleteBuilding(int buildingId, int countryId)
{
PlayerBuilding playerBuilding = new PlayerBuilding()
{
CountryID = countryId,
BuildingID = buildingId
};
try
{
Entities.PlayerBuildings.Attach(playerBuilding);
Entities.PlayerBuildings.DeleteObject(playerBuilding);
Entities.SaveChanges();
}
catch (OptimisticConcurrencyException)
{
Entities.Refresh(RefreshMode.ClientWins, playerBuilding);
Entities.SaveChanges();
}
}
На заметку - может быть, это потому, что ваш метод static ? Как вы реализуете свой контекст? Я надеюсь, что вы не используете синглтон. (
Здесь есть превосходная статья о оптимистическом параллелизме EF здесь , в которой более подробно объясняется, почему вы получаете эту ошибку, и какие шаги можно предпринять для ее устранения. 1024 *