對不起,關於標題,我找不出合適的描述。C#n層實體變更未在插入後反映在DTO中
我有四個層次:
- 核心層:包含DTO的,服務和存儲庫接口。
- 業務層:包含處理業務邏輯的「服務」。
- 數據訪問層:包含處理數據庫訪問和將實體轉換爲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。
我真的不想擺脫通用的存儲庫,因爲它是非常有用的,但我真的不能看到另一種方法來安全地做到這一點,而不改變數據庫(我不能這樣做)。
那麼,我該怎麼辦?