Как я могу сделать сопоставление в serviceStack.ormlite или Dapper в зависимости от типа столбца?Как сделать сопоставление в serviceStack.ormlite или Dapper в зависимости от типа столбца?
Например, у меня есть следующие классы:
//table A
abstract Class A
{
public ulong? id {get; set}
public string Name {get; set}
public string DeviceType {get; set}
abstract public void method()
}
//no table
Class B : A
{
public override void method()
{
//dependent on B implementation
}
}
//no table
Class C : A
{
public override void method()
{
//dependent on C implementation
}
}
От ОРМ мне нужно что-то облегченной, что:
List<A> items = orm.Must_Return_list_With_B_and_C_Instances_From_A_Table();
Как я вижу эту логику:
function Must_Return_list_With_B_and_C_Instances_From_A_Table()
{
var items = new List<A>();
foreach(var row in rows)
{
if (row.DeviceType == "B")
{
items.Add(new B(row)); // mean mapping there
}
else if (row.DeviceType == "A")
{
items.Add(new C(row)); // mean mapping there
}
}
}
Тогда я могу:
-u себе следующий:
foreach(var item in items)
{
item.method(); // calls the right method of class B or C
}
-если мне нужно добавить новый DeviceType я реализую только класса D: A и редактировать картографа, и не коснитесь глобальной логики программы.
Это обычно реализуется в контексте идей ORM и С #?
Если вы понимаете, что я хочу, укажите направление, как сделать подобное. Большое спасибо.
Мне это нравится. Интерфейсы здесь - то, что мне нужно. Но я позабочусь о вашем решении чуть позже. Я хочу знать, возможно ли это, что делает linq.select делать это в сопоставлениях ORM. – Vilix
Потому что мы итерируем коллекцию дважды, один раз, когда ORM-сопоставления, второй, когда выбирается linq. – Vilix