我已經開始一個新項目,並決定使用SharpArchitecture和Fluent nHibernate來爲我的ORM。 (我之前從未使用過nHibernate或SharpArchitecture,因此如果我錯過了某些東西,那麼請溫柔)NHibernate應該負責從域對象映射到視圖模型嗎?
我在做什麼,我不確定這是否是正確的方式或者甚至可能與nHibernate地圖是採取一個域實體可以說客戶端,並將其映射到一個較輕的ClientModel將在我看來使用。較輕型號的原因是我不想爲此視圖帶回客戶端實體中的額外信息。
所以我的想法是除了我的客戶端實體創建一個只有幾個字段的ClientModel實體並使用nHibernate將兩者映射到一起。
我試過一些東西,但都失敗了。
我的問題 - 這是我應該使用nHibernate或我應該使用類似automapper的東西?我是否認爲nHibernate中的單詞映射表示它不是什麼?
尋找一些nHibernate專家來幫助我。
另外一個小樣本將不勝感激。
這是一些代碼。
public class Client : EntityWithTypedId<Guid>
{
public virtual String Name { get; set; }
public virtual String Slug { get; set; }
public virtual IList<Address> Addresses { get; set; }
public virtual String ClientSize { get; set; }
public virtual String Industry { get; set; }
public virtual String Founded { get; set; }
public virtual String Type { get; set; }
public virtual String Specialty { get; set; }
public virtual Boolean ShowOnWebsite { get; set; }
public virtual Image Logo { get; set; }
public virtual Image LogoBlackAndWhite { get; set; }
public virtual Image LogoHighResolution { get; set; }
public virtual String FacebookUrl { get; set; }
public virtual String TwitterUrl { get; set; }
public virtual String LinkedInUrl { get; set; }
public virtual IList<Project> Projects { get; set; }
public virtual IList<Tag> Tags { get; set; }
public override Guid Id { get; protected set; }
public virtual DateTime CreatedDate { get; set; }
public virtual String CreatedBy { get; set; }
public virtual DateTime ModifiedDate { get; set; }
public virtual String ModifiedBy { get; set; }
public virtual DateTime? DeletedDate { get; set; }
public virtual String DeletedBy { get; set; }
}
public class ClientViewModel
{
public virtual String Name { get; set; }
public virtual String Slug { get; set; }
}
public class ClientTasks : IClientTasks
{
private readonly IRepositoryWithTypedId<Client, Guid> _clientRepository;
private readonly IRepositoryWithTypedId<Image, Guid> _imageRepository;
public ClientTasks(IRepositoryWithTypedId<Client, Guid> clientRepository, IRepositoryWithTypedId<Image, Guid> imageRepository)
{
_clientRepository = clientRepository;
_imageRepository = imageRepository;
}
public List<Client> GetAll()
{
var allClients = _clientRepository.GetAll().ToList();
return allClients;
}
}
這是有道理的。所以我使用IRepositoryWithTypedId將它傳遞給我的任務構造器,但似乎無法弄清楚如何只選擇某些字段?這可能嗎? –
我沒有使用SharpArchitecture,但是在大多數存儲庫模式實現中,您將撤回整個項目(大多數實現支持獲取,保存,FindAll 等)。除非有可查詢的實現,否則你幾乎會從數據庫中取回整個對象 –