Вернуть пользовательский объект <List T> из среды Entity и назначить источнику данных объекта
Мне нужно некоторое руководство по проблеме, я использую Entity Framework 4.0, у меня есть DAL и BLL и я привязываю к ObjectDataSource на странице.
Я должен был написать хранимую процедуру, используяPIVOT
и динамический SQL для возврата данных из нескольких объектов так, как я хочу. Теперь я пытаюсь выяснить, как заставить Entity Framework возвращать пользовательский объект, который я могу привязать к своемуObjectDataSource
на странице мне НУЖНО использовать пользовательский объект или динамический объект, поскольку хранимая процедура может возвращать любое количество столбцов, поэтому я не могу использовать строго типизированный класс или сущность, и мне также нужно иметь возможность связать это сObjectDataSource
.
Может кто-нибудь указать хороший способ сделать это и как определить мою функцию? С некоторыми примерами кода, пожалуйста.
Я прочитал, что я должен попытаться использоватьList<T>
для возврата объекта, так как 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
ожидает быть определенным класс или сущность? Как я могу просто создать объект на основе результатов хранимой процедуры и присвоить ему это?