Вернуть настраиваемый объект из Entity framework и назначить объектному источнику данных

Мне нужно руководство по проблеме, я использую Entity Framework 4.0, у меня есть DAL и BLL, и я привязываюсь к ObjectDataSource на странице.

Мне пришлось написать хранимую процедуру, используя PIVOT и динамический SQL, чтобы возвращать данные из нескольких объектов так, как я хочу. Теперь я пытаюсь понять, как я могу заставить Entity Framework возвращать настраиваемый объект, который я могу привязать к моему ObjectDataSource на странице, мне НУЖНО использовать настраиваемый объект или динамический объект, поскольку хранимая процедура может возвращать любое количество столбцов, поэтому я не могу использовать строго типизированный класс или объект, и мне также нужно иметь возможность связать его с ObjectDataSource .

Может ли кто-нибудь указать, как это сделать и как определить мою функцию? Пожалуйста, приведите несколько примеров кода.

Я прочитал, что должен попытаться использовать List для возврата объекта, поскольку EF не поддерживает возврат таблиц / наборов данных, у меня пока есть следующее, но я знаю, что это неправильно.

Я мало работал с дженериками, если бы вы могли указать, как это сделать, я уверен, что это было бы полезно для многих людей.Пожалуйста, предоставьте примеры кода для функции и как привязать ObjectDataSource к возвращаемому объекту?

Мы очень ценим вашу помощь !!

Спасибо за вашу помощь Ричард, вот как сейчас выглядит моя функция на основе вашего предложения об использовании функции DbDataRecord

C # для ObjectDataSource в DAL

public List<DbDataRecord> GetData(int product_id)
{
    List<DbDataRecord> availableProducts = new List<DbDataRecord>();

    var groupData = context.ExecuteStoreQuery<DbDataRecord>("exec 
  spGetProducts @ProductID={0}", product_id);

    availableProducts = groupData.ToList<DbDataRecord>();

    return availableProducts;
}

ObjectDataSource на странице ASPX

<asp:ObjectDataSource ID="ODSProductAvailability" runat="server"
        TypeName="Project.BLL.ProductBL" 
        SelectMethod="GetData"  >
     <SelectParameters>
        <asp:SessionParameter Name="product_id" SessionField="ProductID" />
     </SelectParameters>
</asp:ObjectDataSource>

Прямо сейчас я получаю эту ошибку, когда открываю страницу:

Тип результата 'System.Data.Common.DbDataRecord' не может быть абстрактным и должен включать конструктор по умолчанию

Это потому, что ExecuteStoreQuery ожидает определения класса или объекта? Как я могу просто создать объект на основе результатов хранимой процедуры и назначить ему это?

8
задан Yuval Itzchakov 22 November 2014 в 14:36
поделиться