Hi,
I need to call a SQL stored proc from an app service. For that I will need access to the DBContext. I don't think I can access it directly from Application project.
What is the correct way to call a SQL stored proc and UDF from an app service?
Thanks, SparkyJr
6 Answer(s)
-
0
Hi,
In order to access DbContext you need to define a custom repository, see <a class="postlink" href="https://aspnetboilerplate.com/Pages/Documents/Repositories#custom-repositories">https://aspnetboilerplate.com/Pages/Doc ... positories</a>.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi ismcagdas,
Thanks for your reply!
I tried to understand from the documentation link you had in your reply. But, I do not want to add a repository for an entity. I want to call a SQL Stored Proc and UDF from App Service. The Stored Proc is not specific to a single entity or a SQL table.
It would be great if you could provide me a good example which shows how exactly you call a SQL Stored Proc and UDF from App Service.
Regards, SparkyJr
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi,
It is not possible to call it from AppService. Because you need to access to DbContext. You don't need to define CustomRepository that is releated an entity. If you want to know how to call a SP from a customRepository, we can provide an example.
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Thanks alirizaadiyahsi for your reply!
The Custom Repository has to be extended from either IRepository<TEntity> or IRepository<TEntity, TPrimaryKey>, am I right? What is TEntity in my case? Because Stored Proc doesn't depend on any specific Entity or SQL table. It will play with multiple SQL tables and return a result-set(s). How do I achieve this? Or am I missing something?
Also, please send me your example for calling the Stored Proc from a Custom Repository. That may help!
Regards, SparkyJr
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Hi @sparkyjr,
Sorry for the wrong information, I have told @alirizaadiyahsi to write this answer but I realized that you are right. In the current design, the only way to call a SP is to create a custom repository as far as I know.
So, you need to choose one entity to define your custom repository, you can select the main entity or if there is an aggregate root entity, you can select that one to make it more meaningful.
But you can return a custom type from your custom repository, it will not be a problem. You can define your custom repository like this.
public interface IReportRepository : IRepository<User, long> { List<GetReportOutput> GetReport(GetReportInput input); }Then you can implement it like this.
public class ReportRepository : YourRepositoryBase<User, long>, IReportRepository { public List<GetReportOutput> GetReport(GetReportInput missing_name) { return Context.Database.SqlQuery<List<YourCustomType>>("storedProcedureName",params); } public ReportRepository(IDbContextProvider<YourDbContext> dbContextProvider) : base(dbContextProvider) { } }Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image) -
0
Thanks a lot for your solution!
Markdown is supportedCopy & paste or drag & drop images (max 30 MB per image)