Я использую Mssql в качестве базы данных и EF4 в качестве ORM/DAL.
Мой вопрос касается следующего кода:
public static void DeleteBuilding(int buildingId, int countryId)
{
PlayerBuilding playerBuilding = new PlayerBuilding()
{
CountryID = countryId,
BuildingID = buildingId
};
Entities.PlayerBuildings.Attach(playerBuilding);
Entities.PlayerBuildings.DeleteObject(playerBuilding);
Entities.SaveChanges();
}
Если строка существует, это работает очень хорошо, если нет, я получаю исключение (оператор обновления, вставки или удаления хранилища затронул непредвиденное количество строк (0). Объекты могли быть изменены или удалено после загрузки сущностей. Обновить записи ObjectStateManager.)
Должен ли я выполнить обход базы данных, чтобы проверить, существует ли такая строка:
public static void DeleteBuilding(int buildingId, int countryId)
{
PlayerBuilding playerBuilding = (from p in Entities.PlayerBuildings
where p.BuildingID == buildingId && p.CountryID == countryId
select p).FirstOrDefault();
if (playerBuilding != null)
{
Entities.PlayerBuildings.DeleteObject(playerBuilding);
Entities.SaveChanges();
}
}
Я думаю, что в этом дополнительном обходе нет необходимости, потому что без EF, с простым SQL, я мог бы просто удалить строку с помощью одной команды DELETE.
Что было бы лучшей практикой?