4
我正在實施我的第一個Dapper.Net項目。現在我想知道什麼是最簡單的方法來初始化包含另一個對象(多映射)的對象。dapper.net中的多重映射
這裏是我的代碼:
public static IEnumerable<ShopPrefix> GetShopPrefixes(short fiSL)
{
using (var con = new SqlConnection(Properties.Settings.Default.RM2Con))
{
const String sql = @"
SELECT locShopPrefix.idShopPrefix,
locShopPrefix.fiSL,
locShopPrefix.fiShop,
locShopPrefix.Prefix,
locShopPrefix.Active,
locShop.idShop,
locShop.ShopName,
locShop.ContactPerson,
locShop.Street,
locShop.ZIP,
locShop.City,
locShop.Telephone,
locShop.Telefax,
locShop.Email,
locShop.ShopKey
FROM locShopPrefix
INNER JOIN locShop
ON locShopPrefix.fiShop = locShop.idShop
WHERE (locShopPrefix.fiSL = @fiSL);";
con.Open();
IEnumerable<Tuple<ShopPrefix,Shop>> shops =
con.Query<ShopPrefix, Shop, Tuple<ShopPrefix, Shop>>(
sql
, (shopPrefix, shop) => Tuple.Create(shopPrefix, shop)
, new { fiSL = fiSL }, splitOn: "idShop"
);
foreach (var shop in shops)
shop.Item1.Shop = shop.Item2;
return shops.Select(t => t.Item1);
}
}
所以每次shopPrefix
屬於(有)一個Shop
。
問:這是自Tuple
方法具有以下foreach
兩個對象映射到初始化屬性Shop
看起來笨重的正確方法是什麼?
+1謝謝,看起來很有前途,但現在我越來越_「當使用多地圖API確保您設置的splitOn PARAM如果你有多個id其他鍵」 _。隨着'Tuple'的運作。我會修改你的答案以表明我已經改變了(我需要'ShopPrefixes'而不是'Shops')。 – 2012-07-17 17:19:21
你的DTO的外觀如何?如果ShopPrefix是Shop的孩子,我認爲您必須針對查詢類型定義以下內容:查詢。我不確定Dapper是否可以做一個從Child到Parent的逆映射:) –
Alex
2012-07-17 17:23:08
每個ShopPrefix都屬於/有一個Shop,而Shop有多個前綴。我想初始化(可能是多個)'ShopPrefix'及其相關的'Shop'。 – 2012-07-17 17:28:13