我才刚刚开始查看 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();
执行此操作时,并非所有属性都被填充(尽管 DB 表和我的对象之间的名称相同。
我注意到如果我don't
“选择 p.* 等” 在我的SQL
, 而不是。
我明确说明了这些字段。
我想EXCLUDING
p.CategoryId
从查询中返回,然后所有内容都会被填充(显然 CategoryId 与我已从 select 语句中排除的 Photo 对象除外)。
但我希望能够在查询中包含该字段,并使其以及在 中查询的所有其他字段SQL
得到填充。
我可以CategoryId
从我的班级中排除该属性,并在需要 ID 时Photo
始终使用。Photo.PhotoCategory.CategoryId
但在某些情况下,当我获得 Photo 对象的实例时,我可能不想填充该PhotoCategory
对象。
有谁知道为什么会发生上述行为?这对 Dapper 来说正常吗?