Неожиданное поведение при запросе с несколькими отображениями с использованием Dapper.net

Я только начал смотреть на Dapper.net и экспериментировал с разными запросами, один из которых дает странные результаты, которых я не ожидал.

У меня есть 2 таблицы - Фото и Категории фотографий , из которых связаны на CategoryID

Таблица фотографий

PhotoId (PK - int)  
CategoryId (FK - smallint)  
UserId (int)

Таблица категорий фотографий

CategoryId (PK - smallint)  
CategoryName (nvarchar(50))

Мои 2 класса:

public class Photo
{
    public int PhotoId { get; set; }
    public short CategoryId { get; set; }
    public int UserId { get; set; }
    public PhotoCategory PhotoCategory { get; set; }
}

public class PhotoCategory
{
    public short CategoryId { get; set; }
    public string CategoryName { get; set; }
{

Я хочу использовать множественное сопоставление, чтобы вернуть экземпляр Photo с заполненным экземпляром связанной PhotoCategory .

var sql = @"select p.*, c.* from Photos p inner 
            join PhotoCategories c 
            on p.CategoryID = c.CategoryID where p.PhotoID = @pid";

cn.Open();
var myPhoto = cn.Query<Photo, PhotoCategory, Photo>(sql, 
               (photo, photoCategory) => { photo.PhotoCategory = photoCategory; 
                                           return photo; }, 
               new { pid = photoID }, null, true, splitOn: "CategoryID").Single();

Когда это выполняется, не все свойства заполняется (несмотря на одинаковые имена в таблице БД и в моих объектах.

Я заметил, что если я не 'select p. * etc.' в моем SQL , и вместо этого.

Я явно указываю поля.

Я хочу вернуть ИСКЛЮЧАЯ p.CategoryId из запроса, тогда все будет заполнено (кроме, очевидно, CategoryId против Объект Photo, который я исключил из оператора select).

Но я ожидал, что смогу включить это поле в запрос и получить его, а также все остальные поля, запрашиваемые в SQL , чтобы заполнить.

Я мог бы просто исключить свойство CategoryId из моего класса Photo и всегда использовать Photo.PhotoCategory.CategoryId , когда я требуется идентификатор.

Но в некоторых случаях я могу не захотеть заполнять объект PhotoCategory , когда я получаю экземпляр объект Photo.

Кто-нибудь знает, почему происходит такое поведение? Это нормально для Dapper?

5
задан Ardalan Shahgholi 8 November 2013 в 11:48
поделиться