c# - dapper.net 中的多映射

标签 c# dapper

我正在实现我的第一个 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/

相关文章:

c# - 无法加载文件或程序集 '...' 或其依赖项之一。试图加载格式不正确的程序

java - 从列表中删除多余的文件夹路径

c# - 使用 Dapper 映射 DBNull 时可以抛出异常吗?

c# - 对设置 SQL 查询参数感到困惑

c# - 仅当我指定 commandType 时才出现错误,无法使用 Dapper 和 c# 找到存储过程

c# - 更新我的 Documentdb 中的属性值

c# - 使用 C# 解密 Coldfusion 中的加密字符串

c# - 如何执行卡片翻转动画

inversion-of-control - 如何处理 Dapper 中使用的连接?

c# - 仅从 Dapper connection.Query<T>(sql) 返回某些列/字段