我最近再次阅读这篇文章:http://enterprisecraftsmanship.com/2015/04/20/types-of-cqrs/ 请参阅以下类型1中的代码:
public class CustomerRepository
{
public void Save(Customer customer) { /* … */ }
public Customer GetById(int id) { /* … */ }
public IReadOnlyList<CustomerDto> Search(string name) { /* … */ }
}
请注意,客户有两个独立的对象,即Customer和CustomerDto。我相信实体框架只允许您将一个实体映射到一个类。它如何满足上面的代码?
答案 0 :(得分:1)
DTO类未保存到数据库中。属性映射到实体。
var query = db.Customer.First(c => c.id == id);
var customerDto = Map<CustomerDto>(query);
存储库将DTO类公开给其客户端。实现细节使用实体。这会在数据层中隔离EF。
DTO属性甚至可能不是实体的1:1映射 - 可能涉及许多实体类但是相对平坦的DTO。
public class CustomerInfoDto
{
public int CustomerId { get; set; }
// ... some customer properties
public int CustomerExtendedId { get; set; }
// ... some additional properties
}
var info = from c in db.Customers
join e in db.CustomerExtended on c.Id equals e.CustomerId
select new CustomerInfoDto
{
CustomerId = c.Id,
Name = c.Name,
CustomerExtendedId = e.Id,
LastAccess = e.LastAccess
};