Я только начал изучать Dapper.net и только что экспериментировал с несколькими различными запросами, один из которых дает странные результаты, которых я не ожидал.
У меня есть 2 таблицы - Photos
& PhotoCategories
, из которых относятся к 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();
Когда это выполняется, не все свойства заполняются (несмотря на одинаковые имена в таблице БД и в моих объектах.
Я заметил, что если я don't
'выберите p. * и т. д.' в моем SQL
, и вместо этого.
Я явно указываю поля.
Я хочу вернуть EXCLUDING
p.CategoryId
из запроса,тогда все заполняется (за исключением, очевидно, CategoryId для объекта Photo, который я исключил из оператора select).
Но я ожидал бы, что смогу включить это поле в запрос и заполнить его, как и все другие поля, запрошенные в SQL
.
Я мог быпросто исключите свойство CategoryId
из моего класса Photo
и всегда используйте Photo.PhotoCategory.CategoryId
, когда мне нужен идентификатор.
Но в некоторых случаях я могу не захотеть заполнять объект PhotoCategory
, когда получаюэкземпляр объекта Photo.
Кто-нибудь знает, почему происходит вышеупомянутое поведение?Это нормально для Dapper?