我找不到使用SqlBuilder类所能遵循的任何文档或示例。
我需要动态地生成sql查询,我找到了这个类。这是最好的选择吗?
发布于 2015-09-26 00:00:29
最好的起点是签出github中的dapper源代码,并查看SqlBuilder代码。SqlBuilder类只有200行左右,您应该能够对它是否适合您的需求做出明智的选择。
另一种选择是建立你自己的。我亲自走了这条路,因为这是有道理的。如果您将类属性命名为与数据库相同的类属性,或者添加要映射的属性(如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;
}此方法查看其类的属性,如果它们不是null,并具有displayname属性,则会将它们添加到字典中,并将displayname值作为字符串组件。
此方法被设计为作为模型类的一部分工作,并且需要从一个单独的助手类中进行修改。就我个人而言,它和我的所有其他sql生成方法都在我的所有模型继承的基类中。
一旦在字典中有了值,就可以使用它根据传入的模型动态生成sql。您还可以使用它来填充dapper DynamicParamaters,以便与参数化的sql一起使用。
我希望这能帮助你走上解决问题的正确道路。
https://stackoverflow.com/questions/32752792
复制相似问题