下面的代码生成以下错误:
必须定义参数'@ID'.
我做错了什么或者是不是可以在MySQL查询中使用不是Dapper参数的SQL查询中的变量?
在此示例中,@ Slug是Dapper参数,但@ID不是.我正在使用MySQL所以我不需要DEFINE @ID - 它在第一次使用时被定义.
var sql = @"SELECT @ID := id, slug, Title, Text FROM posts WHERE slug = @Slug; SELECT * FROM comments where postid = @ID;";
using (var connection = GetOpenConnection())
{
var posts = connection.QueryMultiple(sql, new { Slug = slug })
.Map<Post, Comment, int>
(
Post => Post.ID,
Comment => Comment.ID,
(post, comments) => { post.Comments = comments; }
);
return posts.FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud) 我开始将一个简单的ASP.NET MVC Web应用程序从SQL移植到RavenDB.我注意到SQL上的页面比RavenDB上的页面更快.
使用Miniprofiler进行深入研究似乎罪魁祸首是需要做的时间:session.SaveChanges(150-220ms).在RavenDB中保存的代码如下所示:
var btime = new TimeData() { Time1 = DateTime.Now, TheDay = new DateTime(2012, 4, 3), UserId = 76 };
session.Store(btime);
session.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
身份验证模式:当RavenDB作为服务运行时,我假设它使用"Windows身份验证".当部署为IIS应用程序时,我只使用了默认值 - 即"Windows身份验证".
背景:数据库机器与作为Web服务器的开发机器分开.数据库在同一数据库计算机上运行.测试数据非常小 - 比方说100行.查询很简单,返回一个具有12个48字节大小的属性的对象.使用fiddler对RavenDB运行WCAT测试会在数据库计算机上产生更高的利用率(与SQL相比),并且页面数量会少得多.我尝试将Raven作为服务和IIS应用程序运行,但没有看到明显的区别.
编辑
我想确保a)我的一台机器或b)我创建的解决方案不是问题.所以,决定尝试使用Michael Friis创建的另一个解决方案在Appharbor上进行测试:RavenDN示例应用程序,只需将Miniprofiler添加到该解决方案中.迈克尔是Apharbor很棒的人之一,如果你想看看它,你可以在这里下载代码.
Appharbor的结果
你可以在这里试试(现在):
阅读:(7-12ms,少数异常值为100 + ms).
写/保存:(197-312ms)*WOW需要很长时间才能保存*.要测试保存,只需创建一个新的"thingy"并保存它.你可能想要至少两次这样做,因为第一个通常需要更长时间,因为应用程序预热.
除非我们都做错了,否则RavenDB的保存速度非常慢 - 保存速度比读取慢10-20倍.鉴于它异步重新索引,这似乎非常缓慢.
有没有办法加快速度或预期?