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.
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;
dbProdCmd.CommandText = "SP_GetAllProducts";
dbProdCmd.CommandType = CommandType.StoredProcedure;
try
{
((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
{
((IObjectContextAdapter)dbUserContext).ObjectContext.Connection.Close();
}
return View(listProducts);
}
Stored Procedure:
CREATE PROCEDURE [dbo].[SP_GetAllProducts]
AS
BEGIN
SET NOCOUNT OFF;
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:
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]