EF自体が作業単位であり、リポジトリであることを読んだので、本当に必要でない限り、リポジトリレイヤーと別のUoWを作成したくありません。
私はこれについて疑問に思っていました。City Service と Venue Service があります。
FindVenue メソッドがあります
public void FindVenue()
{
// find venue in db
// If not in db - find from 3rd party api
// If from 3rd party api check if city exits in db
// If city does not exist create a city record in db
// If venue does not exist create a new venue record in db
context.SaveChanges();
}
ここで、CreateCity メソッドを DbSet に追加する必要があるのか、それともcontext.SaveChanges();
単に追加する必要があるのか 疑問に思っています。FindVenue で新しい会場の作成が完了したら、両方のレコードを挿入することができます。
そうすれば、データベースへの呼び出しは1回だけで、1つが失敗すると両方がロールバックされます(もちろん、これらは別々であるという議論をすることができ、都市を挿入できるのであれば、なぜそれをしないのですか)
私が見る1つの問題は、誰かがコントローラーからCreateCityを呼び出した場合、都市をデータベースに直接挿入する方法があるため、コントローラーがcontext.SaveChanges()
これを行う必要があることです。 CreateAndSaveCity() という新しいメソッドがあります。