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();
}
行が存在する場合、これは非常にうまく機能します。そうでない場合は、例外が発生します( Store update、insert、または delete ステートメントが予期しない数の行 (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 コマンドで行を簡単に削除できるため、余分なラウンドトリップは不要だと思います。
より良い習慣は何ですか?