Gar*_*yJL 13 c# inheritance subclass dapper
我有一个类似于这样的类结构:
public abstract class Device
{
public int DeviceId { get; set; }
//Additional Properties
}
public class DeviceA : Device
{
//Specific Behaviour
}
public class DeviceB : Device
{
//Specific Behaviour
}
Run Code Online (Sandbox Code Playgroud)
我需要检索设备列表,或者单个设备,它被实例化为适当的派生类型(基于DB中设备记录中的类型值).也就是说,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;
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用Dapper实现这一目标的正确方法,还是有更好的方法?
在当前的构建中,这可能是唯一的选择(特别是因为基本类型是抽象的)。然而,想办法提出一种歧视性的继承制度并不是没有道理的。到目前为止,我们所做的事情并不是仅仅因为它还没有出现——但这听起来并非不可能。我能看到的最大问题(显然除了 IL 争论之外)就是我们如何表达这种关系。