0
A
回答
2
最好的開始是從github倉庫中檢出短小的源代碼,並看看SqlBuilder代碼。 SqlBuilder類只有200行左右,你應該能夠做出明智的選擇,是否適合你的需要。
另一種選擇是建立自己的。我個人認爲這是有道理的。 Dapper將選擇查詢直接映射到類,如果您將類屬性命名爲與數據庫相同的名稱或添加屬性(如displayName)以便映射,則可以使用反射來獲取屬性名稱。把名字和值放到一個字典裏,你可以很容易地從那裏獲得sql。
這裏是什麼讓你開始:
第一個例子類,您可以傳遞給你的sqlbuilder。
public class Foo
{
public Foo()
{
TableName = "Foo";
}
public string TableName { get; set; }
[DisplayName("name")]
public string Name { get; set; }
[SearchField("fooId")]
public int Id { get; set; }
}
這是相當基本的。 DisplayName屬性背後的想法是,您可以分離要包含在自動生成中的屬性。在這種情況下,TableName沒有DisplayName屬性,所以不會被下一個類拾取。但是當你生成你的sql來獲取你的表名時,你可以手動使用它。
public Dictionary<string, object> GetPropertyDictionary()
{
var propDictionary = new Dictionary<string, object>();
var passedType = this.GetType();
foreach (var propertyInfo in passedType.GetProperties())
{
var isDef = Attribute.IsDefined(propertyInfo, typeof(DisplayNameAttribute));
if (isDef)
{
var value = propertyInfo.GetValue(this, null);
if (value != null)
{
var displayNameAttribute =
(DisplayNameAttribute)
Attribute.GetCustomAttribute(propertyInfo, typeof(DisplayNameAttribute));
var displayName = displayNameAttribute.DisplayName;
propDictionary.Add(displayName, value);
}
}
}
return propDictionary;
}
該方法着眼於它的類的屬性,如果它們不爲空,並有displayName屬性將它們添加到與顯示名稱值作爲字符串組成的字典。
此方法被設計爲模型類的一部分,需要修改以從單獨的輔助類中工作。就我個人而言,我擁有它以及我所有模型繼承的Base類中的所有其他SQL生成方法。
一旦你有了字典中的值,你就可以使用它來根據你傳入的模型動態生成sql,並且你也可以用它來填充你的Dapper DynamicParamaters以用於強化的sql。
我希望這可以幫助您找到解決問題的正確途徑。
相關問題
- 1. 如何使用SqlBuilder
- 2. 如何用sqlbuilder建立SELECT查詢?
- 3. 如何設置的ConnectionString爲DbExtensions/SqlBuilder?
- 4. 使用PHP SQLBuilder更新多行
- 5. 使用DBExtensions SqlBuilder進行多個查詢
- 6. 如何使用dapper獲得可空int []?
- 7. 如何使用Dapper獲取SqlDataReader?
- 8. 如何在ServiceStack中使用Dapper
- 9. 使用Dapper的IDbConnection工廠
- 10. 使用Dapper刪除列表<T>使用Dapper
- 11. DbExtensions - 無法操縱SqlBuilder
- 12. 使用dapper訪問Mysql
- 13. 如何調用SQL視圖Dapper c#
- 14. 如何使用Dapper獲取存儲過程的返回值?
- 15. 如何處理在Dapper中使用的連接?
- 16. 如何使用Dapper ORM獲取子對象的值?
- 17. 如何使用Dapper動態獲取列的值
- 18. 如何正確使用列表作爲Npgsql和Dapper的參數
- 19. 如何使用具有多個屬性的集合過濾Dapper?
- 20. 使用npqsql的postgresql和dapper的AsyncQuery
- 21. 使用Dapper時的關閉連接
- 22. 使用Dapper ORM的最簡單方法
- 23. 如何使用Structuremap設置Dapper擴展自定義映射?
- 24. 如何在多數據庫環境中使用Dapper?
- 25. 如何在異步控制器中使用Dapper?
- 26. 如何使用Dapper連接到ProgressDB數據提供者?
- 27. 如何使用MySQL Connector for .NET或Dapper從SHOW PROCESSLIST獲取行?
- 28. 如何使用Dapper從Oracle讀取時間偏移
- 29. 如何使用Dapper清理動態表名稱?
- 30. 如何使用dapper連接到sqlite數據庫?