我可以从 Dapper 查询返回多个派生类型的集合吗

2024-03-14

我有一个与此类似的类结构:

public abstract class Device
{
    public int DeviceId { get; set; }
    //Additional Properties
}

public class DeviceA : Device
{
    //Specific Behaviour
}

public class DeviceB : Device
{
    //Specific Behaviour
}

我需要检索设备列表,或实例化为适当的派生类型的单个设备(基于数据库中设备记录中的类型值)。也就是说,集合Device对象应该包含许多具有不同类型的对象,所有这些对象都派生于Device.

我已经按照以下方式实现了这一点,但感觉有些不对劲。

public static IEnumerable<Device> AllDevices()
{
    using (var connection = CreateConnection())
    {
        connection.Open();
        return connection.Query<dynamic>("SELECT * FROM Device").Select<dynamic, Device>(d =>
            {
                Device device = null;
                if (d.DeviceTypeID == 1)
                    device = new DeviceA();
                else if (d.DeviceTypeID == 2)
                    device = new DeviceB();
                else throw new Exception("Unknown Device");
                device.DeviceId = d.DeviceID;
                return device;
            });
    }
}

这是使用 Dapper 实现此目的的正确方法,还是有更好的方法?


在当前的构建中,这可能是唯一的选择(特别是因为基本类型是抽象的)。然而,想办法提出一种歧视性的继承制度并不是没有道理的。到目前为止,我们所做的事情并不是仅仅因为它还没有出现——但这听起来并非不可能。我能看到的最大问题(显然除了 IL 争论之外)就是我们如何表达这种关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以从 Dapper 查询返回多个派生类型的集合吗 的相关文章

随机推荐