Мне нужно руководство по проблеме, я использую 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
ожидает определения класса или объекта? Как я могу просто создать объект на основе результатов хранимой процедуры и назначить ему это?