我有3个包含相同列的表。我是否需要为所有数据库表创建3个实体?有没有办法避免创建3个实体并且只有一个在ServiceStack中?
是的,有一种方法可以像下面这样做
List<EntityA> list = db.SqlList<EntityA>("SELECT COL_A,COL_B FROM TableA");
实体在课堂上没有 别名
public class EntityA
{
[Alias("COL_A")]
public string ColumnA { get; set; }
[Alias("COL_B")]
public string ColumnB { get; set; }
}
通过这种方式我可以更改查询中提供的表名( TableA / TableB / TableC ) 但我希望在从数据库中检索结果时注入/传递别名。我不确定服务栈
是否可行被修改 让我重新解释这个问题而不是像EntityTableA / EntityTableB / EntityTableC那样返回差异对象作为我想要的结果
return db.Select<GenericEntity>(w => w.OrderBy(o => o.ColumnA));
GenericEntity 可以是任何表格结果
答案 0 :(得分:0)
您可以使用继承来减少样板:
public class EntityBase
{
[Alias("COL_A")]
public string ColumnA { get; set; }
[Alias("COL_B")]
public string ColumnB { get; set; }
}
然后从共享实体继承属性,例如:
public class TableA : EntityBase {}
public class TableB : EntityBase {}
然后正常查询:
var results = db.Select<TableA>(q => ColumnA == "A");
否则,使用任何原始SQL API都会起作用。
您还可以覆盖SqlExpression FromExpression以包含您自己的表,例如:
var q = db.From<GenericEntity>().OrderBy(o => o.ColumnA);
q.From("TableA");
List<GenericEntity> results = db.Select(q);
这会将SQL改为TableA
的SELECT。