I found an alternate way.
Rather then calling Stored Procedure from dbcontext directly I am calling it like dbContext.Database.DbRawSqlQuery. Now I am doing all the above thing in following order
1) Declaring and initializing dbcontext.
2) Creating transaction.
3) Executing procedure using context initialized in step 1.
4) Saving record in databae using same ddContex.
5) saving changes from dbContext to database.
6) Committing transaction.
Even transaction is not needed to create because all the entity(related to database) statements are executed in transaction by default. It can be read
here
.