对于Dapper,我需要构建支持传递AnsiString参数的功能。
数据库同时拥有Unicode和非Unicode字符串,选择正确的参数类型有时至关重要。
DbType.String
与DbType.AnsiString
对于特定的参数,可能会严重影响性能。
在Dapper中,我们动态地传递参数,例如:
Query<User>("select * from Users where Name=@Name", new {Name = "name"});
我有一个内部映射,如果我看到typeof(String)
,我知道要将参数传递为DbType.String
。
然而,我希望我的用户能够指定字符串应该是AnsiString。匿名类不支持属性,因此我需要一个独特的类型来实现这一点。
显然,我可以发明一个:
public class AnsiString
{
private readonly string str;
public AnsiString(string str)
{
this.str = str;
}
public String Value { get { return str; } }
}
这将为我提供干净的API:
Query<User>("select * from Users where Name=@Name",
new {Name = new AnsiString("name")});
然而,如果在System.Data或BCL中存在这样的类,为什么还要发明一个类呢?
在BCL或System.Data
中是否有一种类型可以用作AnsiString
的容器,并具有与上面示例类似的语义?