Я использую Mssql как db и 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) объекты могут быть изменены или удалены с погрузил лицо Refresh 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.
Что было бы лучше?
спасибо за комментарий РПС, но это не проблема оптимистичного параллелизма. Я работаю на локальном компьютере разработчика, не статически не статирую, это не проблема. Контекст создается с помощью этого метода: http://dotnetslackers.com/articles/ado_net/Managing -Entity-Framework-ObjectContext-lifespan-and-scope-in-n-layered-ASP-NET-applications.aspx, используя обычный способ создания контекста, который ничего не меняет. – Adir 2010-12-16 14:39:10