Handle multiple result from a stored procedure with SqlQuery

前端 未结 2 393
孤城傲影
孤城傲影 2020-12-30 10:42

I have a stored procedure which returns a multiple set of results (two tables). I call the stored procedure like this:

var result = context.Database.SqlQuery         


        
相关标签:
2条回答
  • 2020-12-30 11:07

    The DbContext has no native support for materialising multiple resultsets. However, it is reasonably straight forward to achieve by dropping down to the ObjectContext and using the Translate method to copy results from a DbDataReader into entities in your domain model.

    Here's some example code. This assumes your ReferrerStatisticResult is just a container for the two lists called Set1 and Set2. Obviously adjust according to your actual domain model.

    // Create container ready for the resultsets
    var result = new RefererStatisticResult();
    
    using (var myContext = new MyContext())
    {
        // Create command from the context in order to execute
        // the `GetReferrer` proc
        var command = myContext.Database.Connection.CreateCommand();
        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.CommandText = "[dbo].[GetReferrer]";
        // add in command parameters
        // (not shown)
    
        try
        {
            myContext.Connection.Open();
            var reader = command.ExecuteReader();
    
            // Drop down to the wrapped `ObjectContext` to get access to
            // the `Translate` method
            var objectContext = ((IObjectContextAdapter)myContext).ObjectContext;
    
            // Read Entity1 from the first resultset
            result.Set1 = objectContext.Translate<Entity1>(reader, "Set1", MergeOptions.AppendOnly);
    
            // Read Entity2 from the second resultset
            reader.NextResult();
            result.Set2 = objectContext.Translate<Entity2>(reader, "Set2", MergeOptions.AppendOnly);        
        }
        finally
        {
            myContext.Database.Connection.Close();
        }
    }
    
    0 讨论(0)
  • 2020-12-30 11:22

    I think following code could help you.

     MultiResultDomain domainEntity = new MultiResultDomain();
         var command = _DatabaseContext.Database.Connection.CreateCommand();
         command.CommandText = "[dbo].[SPR_GETMultipleResultSP]";
         command.CommandType = CommandType.StoredProcedure;
         try
         {
             _DatabaseContext.Database.Connection.Open();
             var reader = command.ExecuteReader();
    
         List<customcustomer> _listOfCustomer =
         ((IObjectContextAdapter)_DatabaseContext).ObjectContext.Translate<customcustomer>
         (reader).ToList();
             reader.NextResult();
             List<customproduct> _listOfProduct =
                 ((IObjectContextAdapter)_DatabaseContext).ObjectContext.Translate<customproduct>
         (reader).ToList();
    
             foreach (var cust in _listOfCustomer)
             {
                 Console.WriteLine("Name: Mr.{0} And Country: {1}", cust.FirstName,
                 cust.Country);
             }
    
             foreach (var product in _listOfProduct)
             {
                 Console.WriteLine("ProductName: {0} And Package: {1}",
                 product.ProductName, product.Package);
             }
    
             domainEntity.Customer = _listOfCustomer;
             domainEntity.Product = _listOfProduct;
             return domainEntity;
    

    Ref: Click here

    0 讨论(0)
提交回复
热议问题