Procedimentos armazenados de LINQ to SQL com vários resultados
Seguimos a abordagem abaixo para obter os dados de vários resultados usando o LINQ To SQL
CREATE PROCEDURE dbo.GetPostByID
(
@PostID int
)
AS
SELECT *
FROM Posts AS p
WHERE p.PostID = @PostID
SELECT c.*
FROM Categories AS c
JOIN PostCategories AS pc
ON (pc.CategoryI,D = c.CategoryID)
WHERE pc.PostID = @PostID
O método de chamada na classe que herda de DataContext deve se parecer com:
[Database(Name = "Blog")]
public class BlogContext : DataContext
{
...
[Function(Name = "dbo.GetPostByID")]
[ResultType(typeof(Post))]
[ResultType(typeof(Category))]
public IMultipleResults GetPostByID(int postID)
{
IExecuteResult result =
this.ExecuteMethodCall(this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
postID);
return (IMultipleResults)(result.ReturnValue);
}
}
Observe que o método é decorado não apenas com o atributo Function que é mapeado para o nome do procedimento armazenado, mas também com os atributos ReturnType com os tipos de conjuntos de resultados que o procedimento armazenado retorna. Além disso, o método retorna uma interface sem tipo de IMultipleResults:
public interface IMultipleResults : IFunctionResult, IDisposable
{
IEnumerable<TElement> GetResult<TElement>();
}
para que o programa possa usar essa interface para recuperar os resultados:
BlogContext ctx = new BlogContext(...);
IMultipleResults results = ctx.GetPostByID(...);
IEnumerable<Post> posts = results.GetResult<Post>();
IEnumerable<Category> categories = results.GetResult<Category>();
Nos procedimentos armazenados acima, tivemos duas consultas de seleção 1. Selecione a consulta sem associação 2. Selecione a consulta com Associação
Mas, na segunda consulta selecionada, os dados exibidos são de uma das tabelas, ou seja, da tabela Categorias. Mas usamos junção e queremos exibir a tabela de dados com os resultados de ambas as tabelas, ou seja, de Categorias e PostCategories.
Por favor, se alguém puder me informar como conseguir isso usando LINQ to SQLQual é a troca de desempenho se usarmos a abordagem acima em relação à implementação da abordagem acima com SQL simples