2017-01-23 71 views
1

我使用C#,我嘗試創建一個表,使用ServiceStack.OrmLite,對應於運行時創建一個類的類型,我關注的話題,我已經找到了以下解決方案:創建(和選擇)的表使用動態servicestack ormlite

  • runtime (employeeType)創建類型後,我能做到以下幾點:

    db.CreateTableIfNotExists(employeeType); 
    

這將創建對應(動態創建類型爲 「員工」)的Employee表

  • 然後,使用下列內容:

    var typedApi = db.CreateTypedApi(employeeType); 
    

我能得到一個TypedApi可能用於插入,刪除,更新動態創建的Employee表。

  • 其實,我的問題是,我不能讓從表中「僱員」一個簡單的SELECT語句,因爲這需要通過一個通用type T我沒有,具體如下:

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

是否可以從對應於運行時創建類型的表中進行選擇?

謝謝你的幫助!

+0

對的,這是可能的! – MarmiK

回答

1

OrmLite API和SqlExpression是有類型的,但您可以執行自定義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); 
+0

感謝您的回覆..事實上,我正在尋找另一種解決方案,而不是使用自定義SQL!我想這是做我想做的唯一方法。無論如何,這似乎做的工作:) – Adel