我正在实现我的第一个 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
看起来很繁琐?
最佳答案
我认为您不需要 IEnumerable<Tuple<>>
对于简单的一对一对象关系。
以下代码段也应该足够了。
var shopsPrefixes = con.Query<ShopPrefix, Shop, ShopPrefix>(sql
, (shopPrefix, shop) =>
{
shopPrefix.Shop = shop;
return shopPrefix;
}
, new { fiSL = fiSL }
, splitOn: "idShop"
);
return shopsPrefixes;
关于c# - dapper.net 中的多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520968/