我正在使用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.
是否可以从与运行时创建的类型对应的表中进行选择?
感谢您的帮助!
答案 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);