申し訳ありませんが、私は適切な記述を見つけることができませんでした。挿入後にC層のエンティティの変更がDTOに反映されない
- コア層:サービスとリポジトリのDTOの、インタフェースが含まれてい
私は4層を持っています。
- ビジネス層:ビジネスロジックを処理する「サービス」が含まれます。
- データアクセスレイヤー:データベースへのアクセスとエンティティのDTOへの変換を処理するリポジトリが含まれています。
- プレゼンテーション層:UIのものが
私は最善の解決方法がわからない問題に遭遇しました。
// The AdministrationRate has an ID property, Entity Framework does treat the property as an Identity and does increment it.
var adminRate = new AdministrationRate() {FosterChildID = fosterChild.ID};
await adminRateService.AddAdministrationRate(adminRate);
AdministrationRateService:
public async Task AddAdministrationRate(AdministrationRate administrationRate) => await repo.AddAdministrationRate(administrationRate);
AdministrationRateRepository:
//I use a generic repository to avoid code repition.
//Notice the DTO to entity conversion. ID is not set in the conversion.
public async Task AddAdministrationRate(AdministrationRate administrationRate) => await Add(administrationRate.ToEntity());
リポジトリ:私は非同期的にそうように、データベースにエンティティを追加してい
public async Task Add(TEntity entity)
{
using (var db = new DatabaseContext())
{
db.Entry(entity).State = EntityState.Added;
await db.SaveChangesAsync();
}
}
そして、それが問題になるのは、エンティティの新しく生成されたIDがDTO(DTO.ID = 0)に反映されていないということです。
エンティティをプレゼンテーションレイヤー内のDTOに変換して非同期にする必要があるため、更新されたエンティティを返すことはできません。
汎用リポジトリのためIDだけを返すこともできません。
非常に便利なので汎用リポジトリを取り除きたいとは思っていませんが、データベースを変更せずに安全に行うことはできません。
どうすればいいですか?