Click here to Skip to main content
15,881,413 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi,
I am trying to retrieve data from stored procedure in entity framework code first model. But while I try it gives me an error “The underlying provider failed on an open” for the inner list of data.
C#
       using (ProductDbContext dbUserContext = new ProductDbContext())
       {
           listProducts = dbUserContext.Database.SqlQuery<products>("SP_GetAllProducts");
           dbUserContext.Database.Initialize(force: false);

           var dbProdCmd = dbUserContext.Database.Connection.CreateCommand();
           dbProdCmd.Connection = dbUserContext.Database.Connection;

//((IObjectContextAdapter)dbUserContext).ObjectContext.Connection.Open();

           dbProdCmd.CommandText = "SP_GetAllProducts";
           dbProdCmd.CommandType = CommandType.StoredProcedure;
           try
           {
               // dbUserContext.Database.Connection.Open();
               ((IObjectContextAdapter)dbUserContext).ObjectContext.Connection.Open();

               dbUserContext.Database.SqlQuery<products>("SP_GetAllProducts");

               var prodReader = dbProdCmd.ExecuteReader();

               listProducts = ((IObjectContextAdapter)dbUserContext)
              .ObjectContext
              .Translate<products>(prodReader, "Products", MergeOption.AppendOnly).ToList();
               prodReader.Dispose();
           }
           finally
           {
               //dbUserContext.Database.Connection.Close();
               //((SqlConnection)dbUserContext.Database.Connection).Close();

               ((IObjectContextAdapter)dbUserContext).ObjectContext.Connection.Close();
           }
           //((IObjectContextAdapter)dbUserContext).ObjectContext.ContextOptions.LazyLoadingEnabled = false;
           return View(listProducts);
       }

Stored Procedure:
SQL
CREATE PROCEDURE [dbo].[SP_GetAllProducts]
	-- Add the parameters for the stored procedure here
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT OFF;

    -- Insert statements for procedure here
	SELECT * FROM [DBO].[Products]
	SELECT * FROM [DBO].[prd1]
	SELECT * FROM [DBO].[prd2]
	SELECT * FROM [DBO].[prd3]
	SELECT * FROM [DBO].[prd4]
	SELECT * FROM [DBO].[prd5]
	SELECT * FROM [DBO].[prd6]
END

Model: Model structure is something like this:
C#
using System.Collections.Generic;
using System;
using System.Data.Entity;

namespace Project.Models
{
    public class Products
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime CreationDate { get; set; }
        public DateTime ModificationDate { get; set; }

        public virtual ICollection<t> prd1 { get; set; }
        public virtual ICollection<t> prd2 { get; set; }
        public virtual ICollection<t> prd3 { get; set; }
        public virtual ICollection<t> prd4 { get; set; }
        public virtual ICollection<t> prd5 { get; set; }
    }

    public class ProductContext : DbContext
    {
        public DbSet<t> prd { get; set; }
        public DbSet<t> prd1 { get; set; }

        public DbSet<t> prd2 { get; set; }
        public DbSet<t> prd3 { get; set; }
        public DbSet<t> prd4 { get; set; }
        public DbSet<t> prd5 { get; set; }
}

Please reply ASAP.
Thanks.

[Edit]Code block added[/Edit]
Posted
Updated 5-Jan-13 4:36am
v3
Comments
Zoltán Zörgő 6-Jan-13 6:09am    
Any progress?
Rohit Kesharwani 7-Jan-13 4:01am    
As above we have mentioned our Stored Procedure structure, there are multiple select queries for different tables to fetch records.

If we use join then will it resolve our issues?

Please let me know your thoughts and suggestations.

Thanks,

1 solution

Your stored procedure will return 7+1 different result sets. I am pretty sure that EF won't be able to handle this even if all have the same fields and all can be mapped to the entity you want. Check this to see how multiple result sets can be handled in EF5: http://msdn.microsoft.com/en-US/data/jj691402[^]
If you use EF before v5, I suggest you use UNION between the seven select statements and, and leave nocount on. This way you will be forced to provide union compatibility between the seven selections.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900