サンプルアプリでデータベースファーストのアプローチを採用しています。POCOクラスはt4テンプレートを介して生成され、データベースから保持するIdentityプロパティを持ちます。ドメイン内のエンティティとして使用する一部のクラスでは、IDのタイプはint、string、Guidになります。
ドメインで生成してリポジトリに渡すことができる文字列またはGUIDのIDに問題はありません。intの場合もそれは可能ですが、SQLデータベースのAUTOINCREMENTオプションを利用したいと思います。
私の質問は次のとおりです。
誰の責任は、エンティティのIDを生成することです。それはドメインですか、それともリポジトリですか?
リポジトリとドメイン間でIDの同期をどのように行うことができますか?たとえば、ドメイン内の顧客のIDを1000にして、リポジトリに保存するように依頼できます。リポジトリがそれを保存するとき、新しいIDは2000である可能性があります(AUTOINCREMENTオプションが新しいIDを設定します)。これで2つのエンティティが異なり、ドメイン内のCustomerエンティティ(将来の操作のためにキャッシュされると想定)がDepartmentなどの他のエンティティと一緒に使用されると、ドメインで問題が発生する可能性があります。IDが1000のドメインにキャッシュされたエンティティ(Customer )は、SQLデータストアに新しいエンティティとして保存されます。リポジトリは、顧客がキャッシュされているか新規であるかを認識していません。