我正在使用Dapper将我的实体映射到SQL Server CE.如果我保存DateTime有Kind=Utc,当我读回我得到一个DateTime与Kind=Unspecified,从而导致所有类型的问题.
例:
var f = new Foo { Id = 42, ModificationDate = DateTime.UtcNow };
Console.WriteLine("{0} ({1})", f.ModificationDate, f.ModificationDate.Kind);
connection.Execute("insert into Foo(Id, ModificationDate) values(@Id, @ModificationDate)", f);
var f2 = connection.Query<Foo>("select * from Foo where Id = @Id", f).Single();
Console.WriteLine("{0} ({1})", f2.ModificationDate, f2.ModificationDate.Kind);
Run Code Online (Sandbox Code Playgroud)
此代码提供以下输出:
20/09/2012 10:04:16 (Utc)
20/09/2012 10:04:16 (Unspecified)
Run Code Online (Sandbox Code Playgroud)
我知道我应该使用a DateTimeOffset,但遗憾的是SQL CE不支持这种类型.
有解决方法吗?我可以告诉Dapper假设所有日期都有DateTimeKind.Utc吗?更一般地说,我有哪些自定义映射的选项?
编辑:我目前的解决方法是修补Dapper实现结果后的日期,但它有点气味......
var results = _connection.Query<Foo>(sql, param).Select(PatchDate);
...
static Foo PatchDate(Foo f)
{
if (f.ModificationDate.Kind …Run Code Online (Sandbox Code Playgroud) 如果我有一个简单的查询,例如:
string sql = "SELECT UniqueString, ID FROM Table";
Run Code Online (Sandbox Code Playgroud)
我想将它映射到字典对象,例如:
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
Run Code Online (Sandbox Code Playgroud)
我怎么用Dapper这样做?
我假设它是这样的:
myDictionary = conn.Query<string, int>(sql, new { }).ToDictionary();
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚正确的语法.
ADO.NET中有一个很好的功能,允许您在一次往返中将多个SQL语句发送到数据库,并接收所有语句的结果:
var command = new SqlCommand("SELECT count(*) FROM TableA; SELECT count(*) FROM TableB;", connection);
using(var reader = command.ExecuteReader())
{
reader.Read();
resultA = reader.GetInt32(0);
reader.NextResult();
reader.Read();
resultB = reader.GetInt32(0);
}
Run Code Online (Sandbox Code Playgroud)
Dapper.NET中是否有类似的功能?
我正在尝试Dapper ORM,我正在查询帖子表.
但我想获得分页结果......
1 - 我该怎么做?这不是帮手吗?
2 - Dapper Query可以返回IQueryable吗?
谢谢你,米格尔
我刚开始玩Dapper.到目前为止,我喜欢它.小巧玲珑不适用TransactionScope吗?我注意到,即使我从不打电话,TransactionScope.Complete我的更改仍然会提交到数据库.如果现在不支持TransactionScope,是否有任何计划支持它?如果没有那么你必须使用传统的事务管理(System.Transactions.Transaction)?
更新:我刚刚通过Twitter与Sam谈过.它应该工作.我将在明天上午(工作中)更新它的详细信息,看看是否有人可以弄清楚为什么我的更改仍然被提交到数据库,即使我从未调用完成.
任何人都知道为什么Dapper从中返回一个int .Execute(...)?
我无法在任何地方找到这个记录.
Dapper dot net有一个buffer参数(bool),但据我所知,它唯一能做的就是在返回之前将结果转换为列表.
根据文件:
Dapper的默认行为是执行你的sql并在返回时缓冲整个读者.在大多数情况下,这是理想的,因为它最大限度地减少了数据库中的共享锁,并减少了数据库网络时间.
但是,在执行大量查询时,您可能需要最小化内存占用并仅根据需要加载对象.为此,在Query方法中传递,缓冲:false.
我不确定如何将结果转换为列表来实现此目的.我错过了什么吗?我唯一的想法是它应该设置CommandBehavior为ExecuteReaderto CommandBehavior.SequentialAccess(但它没有).
Dapper(这似乎是最快,最流行的"微型ORM工具")之间存在一些性能比较.现在是2014年9月,我们有实体框架6(不是5或4),Dapper仍然存在.
我们将开始开发一个庞大的数据库n层应用程序(数据库有700个表).并且需要运行的一些查询对时间非常敏感.
谢谢!
Dapper如何帮助防止SQL注入?我正在测试不同的DAL技术,必须选择一个来保护我们的网站.我倾向于Dapper(http://code.google.com/p/dapper-dot-net/),但需要一些帮助来学习安全性.
我使用dapper将数据库中的对象作为IEnumerable返回.默认dapper的缓冲区设置为true.
这是如何运作的?
如果dapper缓存第一个查询,然后从内存中获取对象.
如果有人在表中编辑/删除/添加行会发生什么.必须再次为此查询重新缓存所有数据吗?