使用servicestack ormlite

时间:2017-01-23 10:58:07

标签: c# sql-server ormlite-servicestack

我正在使用C#,我尝试使用ServiceStack.OrmLite创建一个表,对应于在运行时中创建的类类型,我搜索了主题我找到了以下解决方案:

  • runtime (employeeType)中创建类型后,我可以执行以下操作:

    db.CreateTableIfNotExists(employeeType);
    

这将创建对应于(动态创建的类型" Employee")

的表Employee
  • 然后,使用以下内容:

    var typedApi = db.CreateTypedApi(employeeType);
    

我可以获得一个TypedApi,可以用来插入,删除,更新动态创建的Employee表。

  • 事实上,我的问题是我不能从表格#34;员工"因为这需要传递我没有的通用type T,如下所示:

    db.Select<T>(); // T is supposed to be my "employeeType" created  dynamically.
    

是否可以从与运行时创建的类型对应的表中进行选择?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

OrmLite API和SqlExpression是Typed,但您可以为您的运行时类型执行自定义SQL,例如:

var modelDef = employeeType.GetModelMetadata();
var tableName = db.GetDialectProvider().GetQuotedTableName(modelDef);
var sql = $"SELECT * FROM {tableName}";

然后您可以使用dynamic result set APIs中的一个选择,例如:

var results = db.Select<List<object>>(sql);
var results = db.Select<Dictionary<string,object>>(sql);
var results = db.Select<dynamic>(sql);