Привязка набора данных к Gridview в методе поиска REST WCF и к Linq to Sql
Я использовал шаблон REST WCF для создания библиотеки служб WCF для создания вызовов PUT и GET. PUT метод отлично работает, отправляя мой BLOB-объект в базу данных.
На GET я хочу иметь возможность прямого доступа к веб-сервису и отображать результаты хранимой процедуры в виде набора данных и связывать его с видом сетки. Хранимая процедура представляет собой простой оператор выбора, возвращающий три из четырех столбцов таблицы. У меня есть следующее:
[WebGet(UriTemplate = "/?name={name}", ResponseFormat = WebMessageFormat.Xml)]
public List<Object> GetCollection(string name)
{
try
{
db.OpenDbConnection();
// Call to SQL stored procedure
return db.GetCustFromName(name);
}
catch (Exception e)
{
Log.Error("Stored Proc execution failed. ", e);
}
finally
{
db.CloseDbConnection();
}
return null;
}
Я также добавил Linq в класс SQL, чтобы включить в него таблицу базы данных и доступ к хранимым процедурам. Я также создал файл Default.aspx в дополнение к другим необходимым файлам.
protected void Page_Load(object sender, EventArgs e)
{
ServiceDataContext objectContext = new ServiceDataContext();
var source = objectContext.GetCustFromName("Tiger");
Menu1.DataSource = source;
Menu1.DataBind();
}
Но это дает мне Тип сущности '' не принадлежит ни одной зарегистрированной модели.
Где должна быть сделана привязка данных? Каким должен быть тип возвращаемого значения для GetCollection()? Я застрял с этим. Пожалуйста, предоставьте помощь о том, как это сделать.
1 ответ
Прежде всего, почему у вас есть список объектов, а не пользовательский класс / тип или данные? И тогда, и вернуть 0, я бы предпочел установить, чтобы вернуть новый List<Object>
sp вернет обратно набор данных или datatable.
Сначала создайте класс для custommer:
class Custommer
{
private int gID;
private string gName;
public int ID
{
get
{
return gID;
}
set
{
gID=value;
}
}
public string Name
{
get
{
return gName;
}
set
{
gName=value;
}
}
...
}
Тогда как то так:
[WebGet(UriTemplate = "/?name={name}", ResponseFormat = WebMessageFormat.Xml)]
public List<Custommer> GetCollection(string name)
{
try
{
db.OpenDbConnection();
// Call to SQL stored procedure
DataTable vDT = db.GetCustFromName(name);
//Create a new list of custommer
List<Custommer> vListOfCustommer = new List<Custommer>();
//loop all row from the sp from database.
foreach (DataRow r in vDT) {
Custommer vCustommer = new Custommer();
vCustommer.ID =r["ID"];
vCustommer.Name= r["Name"];
vListOfCustommer.add(vCustommer);
}
// return list of custommer
return vListOfCustommer;
}
catch (Exception e)
{
Log.Error("Stored Proc execution failed. ", e);
}
finally
{
db.CloseDbConnection();
}
return new List<Custommer>();
}