Привязка набора данных к Gridview в методе поиска REST WCF и к Linq to Sql - PullRequest
0 голосов
/ 04 марта 2011

Я использовал шаблон 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 голосов
/ 04 марта 2011

Прежде всего, почему у вас есть список объектов, а не пользовательский класс / тип или данные? И тогда, и вернув 0, я бы предпочел вернуть новое List<Object> sp вернет обратно набор данных или данные.

Сначала создайте класс для 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>();  
}
...