我們一直在使用Automapper,並且我們認爲這是非常棒的實用工具,感謝您創建它!如何使用Automapper映射到內部屬性?
但是,我們有一個問題:
問題
「你怎麼配置AutoMapper到源屬性映射到內部目的地的財產?」
背景
在我們的分層架構中,DTO對象永遠不會離開數據訪問層,只有域對象可以進出通過數據訪問層。因此,從域POV中,域對象不應包含任何數據庫知識。但是,實際上數據庫ID是非常有用的 - 預計'業務層'開發人員不應該知道它們。
解決方案:將數據庫ID添加到域對象,但將它們作爲內部銷售,以便它們不會暴露於「業務層」。接下來將公共層(擁有域對象)內部公開給數據訪問層。問題解決了。預計我們無法弄清楚如何讓Automapper(> v3.3.0)與我們的內部屬性一起工作。
在,版本3.3.0 BindingFlags
被暴露,用來解決問題。
例
Common.Dll
public class Person
{
public Parent Father { get; set; }
internal int FatherId {get; private set; }
}
DataAccess.dll
internal class PersonDto
{
public ParentDto Father { get; set; }
public int FatherId {get; private set; }
}
在我們的檔案類,所以必須CreateMap<PersonDto, Person>();
編輯1 - 修正了父類返回類型的錯字。
編輯2 - 增加了更多的信息..
在Common.Dll,我們有服務是這樣的:
public class ParentService
{
public Parent GetFather(Person person)
{
return repo.Parents.FirstOrDefault(parent => parent.Id = person.Father.Id);
}
}
而在Business.Dll我們有開發者的使用服務這樣的事情:
var father = parentService.GetFather(son);
// use father separately or assign it to the son. Like so:
// son.Father = father;
重點是,我們不希望業務開發人員有權訪問來自Businssess.Dll的也不能訪問創建域對象的Dto對象。因此,所有'數據庫'知識都封裝在各種Common.dll服務或DataAccess.dll中。
謝謝。