将多个类映射到单个实体

时间:2017-09-06 21:16:48

标签: c# entity-framework

我最近再次阅读这篇文章: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。我相信实体框架只允许您将一个实体映射到一个类。它如何满足上面的代码?

1 个答案:

答案 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
            };