我使用 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 命令简单地删除该行。
什么是更好的做法?