C # Entity Framework Несколько результатов - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь получить несколько результатов из хранимой процедуры, которая возвращает 3 набора результатов.

  • Первый результат - один столбец с именем «Сообщение».
  • Второй набор результатов представляет собой таблицу
  • Третий набор результатов представляет собой другую таблицу

Моя основная проблема заключается в том, что любой другой пример того, как подходить к множеству наборов результатов из хранимой процедуры, подразумевает, что каждый набор результатов может быть сопоставлен с сущностью, что не относится к моему первому результату.

Первый результат:

Select @Message

Второй набор результатов, возвращаемый по этому запросу:

Select SecondId, SecondName 
From T_Table1

Третий набор результатов, возвращаемый по этому запросу:

Select ThirdId, ThirdName 
From T_Table2

Обновление Я обновляю свой EDMX напрямую, я включу Пример от Microsoft и объясню мою проблему.

<FunctionImport Name="s_GetAllData">
      <ReturnType EntitySet="CustomerNames" Type="Collection(Model.CustomerName)" />
      <ReturnType EntitySet="CustomerOrders" Type="Collection(Model.CustomerOrder)" />
      <ReturnType EntitySet="CustomerShippings" Type="Collection(Model.CustomerShipping)" />
</FunctionImport>

В соответствии с этим мне понадобится тип коллекции для ссылки (то есть мне понадобится существующая таблица в базе данных, которая отражает входящие столбцы).

Невозможно добавить таблицу в модель EF, если в ней нет поля «Ключ», которого нет в моих результатах.

1 Ответ

2 голосов
/ 29 июня 2019

Я не использую файлы EDMX и не трогал их годами, но вот пример того, как вы можете использовать несколько результирующих наборов из вызова хранимой процедуры, используя POCO.В приведенном ниже примере хранимая процедура dbo.MyProc имеет два оператора выбора, предположим, что первый выбор просто выбирает строку, как в вашем примере.

using (DbContexts.MyDbContext db = new DbContexts.MyDbContext())
        {
                using (var cmd = db.Database.Connection.CreateCommand())
                {
                    db.Database.Connection.Open();
                    cmd.CommandText = "EXEC dbo.MyProc @param1=@param1";
                    cmd.Parameters.Add(new SqlParameter("@param1", SqlDbType.Int) { Value = 1 });

                    using (var rdr = cmd.ExecuteReader())
                    {
                        using (var objectContext = ((IObjectContextAdapter)db).ObjectContext)
                        {
                            List<string> listSTring = objectContext.Translate<string>(rdr).ToList();
                            rdr.NextResult();
                            List<MyClass> listMyClass = objectContext.Translate<MyClass>(rdr).ToList();
                        }
                    }
                }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...