私はDapper.netを見始めたばかりで、いくつかの異なるクエリを試しています。そのうちの1つは、予期しない奇妙な結果を生成しています。
私は2つのテーブルを持っています- Photos&PhotoCategories、そのうちに関連していますCategoryID
写真表
PhotoId (PK - int)
CategoryId (FK - smallint)
UserId (int)
PhotoCategoriesテーブル
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テーブルとオブジェクト間で同じ名前が使用されているにもかかわらず)。
'p。*などを選択するとdon't' 私のSQL中で、そして代わりに。
私はフィールドを明示的に述べます。
クエリから戻りたいEXCLUDING p.CategoryIdのですが、すべてが入力されます(selectステートメントから除外したPhotoオブジェクトに対するCategoryIdを除く)。
ただし、そのフィールドをクエリに含めて、そのフィールドと、内でクエリされた他のすべてのフィールドをSQL入力できるようにする必要があります。
CategoryIdクラスからプロパティを除外して、IDが必要なときにPhoto常に使用することができます。Photo.PhotoCategory.CategoryId
PhotoCategoryただし、Photoオブジェクトのインスタンスを取得するときに、オブジェクトにデータを入力したくない場合があります。
上記の動作が発生している理由を誰かが知っていますか?これはDapperにとって正常ですか?