2015-03-08 3 views
0

У меня возникли проблемы с отображением атрибута внешней таблицы в моем DTO. Я нанес на карту источника таблицу BOOK, которая имеет свойство навигации от AUTHORк месту назначения DTO BookDTO но когда я выполнить запрос я получаю только записи из BOOK таблицы.Automapper - Отсутствует атрибут внешней таблицы

Автор:

public int Id { get; set; } 
    [Required] 
    public string Name { get; set; } 

Книга:

public int Id { get; set; } 
    [Required] 
    public string Title { get; set; } 
    public int Year { get; set; } 
    public decimal Price { get; set; } 
    public string Genre { get; set; } 

    // Foreign Key 
    public int AuthorId { get; set; } 
    // Navigation property 
    public Author Author { get; set; } 

BookDTO:

public int Id { get; set; } 
    public string Title { get; set; } 
    public string AuthorName { get; set; } 

Mapping:

Mapper.CreateMap<Book, BookDTO>() 
      .ForMember(dest => dest.AuthorName, 
         opts => opts.MapFrom(src => src.Author.Name) 
         ); 

Запрос:

var books = Mapper.Map<IEnumerable<BookDTO>>(db.Books).ToList().AsQueryable();    
     return books; 

запроса генерируется:

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Title] AS [Title], 
    [Extent1].[Year] AS [Year], 
    [Extent1].[Price] AS [Price], 
    [Extent1].[Genre] AS [Genre], 
    [Extent1].[AuthorId] AS [AuthorId] 
FROM 
    [dbo].[Books] AS [Extent1] 

ответ

1

Это происходит потому, что ваш запрос выбирает данные только из Books таблицы. Вы должны использовать функцию Include также загрузить Author свойство:

var books = Mapper.Map<IEnumerable<BookDTO>>(db.Books.Include(x => x.Author)) 
       .ToList() 
       .AsQueryable(); 
+0

почему этот запрос не требует включения? из Ь в db.Books выбрать новый BookDTO() { Id = b.Id, Заголовок = b.Title, AUTHORNAME = b.Author.Name }; – YOusaFZai

+0

Это означает, что я должен включать каждое свойство навигации в запрос по Eager Loading? – YOusaFZai

Смежные вопросы