Как использовать ormlite с SQL Server и Mars?
Служба стека поклонников, привет!
Мы легион (я надеюсь на это), поэтому, пожалуйста, помогите брату:)
Я пытаюсь заполнить две коллекции одним вызовом хранимой процедуры SQL Server 2008, который возвращает два набора результатов. У меня есть "MultipleActiveResultSets=True" в строке подключения, но я все еще получаю эту ошибку:
Функция r.NextResult() вызвала исключение типа System.InvalidOperationException
Вот мой код:
IList<ProjectMember> projectMembers = null;
IList<Project> projects = DbFactory.Run(dbCnx =>
{
using (var dbCmd = dbCnx.CreateCommand())
{
dbCmd.CommandType = CommandType.StoredProcedure;
dbCmd.CommandText = "mySchema.myStoredProc";
dbCmd.Parameters.Add(new SqlParameter("@categoryId", categoryId));
using (profiler.Step("ProjectService.myStoredProc"))
{
var r = dbCmd.ExecuteReader();
projectMembers = r.ConvertToList<ProjectMember>();
return r.NextResult() ? r.ConvertToList<Project>() : null;
}
}
});
Это возможно? Если да, то можете ли вы показать мне пример того, как это сделать?
Спасибо,
Samir
1 ответ
Решение
Я нашел способ, но мне пришлось заменить ormLite на Dapper:
using(var cnx = DbFactory.CreateConnection(Global.ConnectionString))
{
using (var multi = cnx.QueryMultiple("mySchema.myStoredProc", new { communityId, categoryId }, commandType: CommandType.StoredProcedure))
{
var projectMembers = multi.Read<ProjectMember>().ToList();
var projects = multi.Read<Project>().ToList();
BindProjectMembers(projects, projectMembers);
return projects;
}
}
Он работает отлично и в два раза быстрее (от 40 мс до 20 мс), чем до улучшения MARS.