none
在ADO.NET Data Service中使用Complex Type的问题 RRS feed

  • 問題

  •  

    大家好,我在使用ADO.NET Data Service的时候遇到一点小问题,希望大家有这方面经验的朋友多指教

    我的环境是:Visual Studio 2010,框架选择为.NET Framework 4.0。数据实体是Entity Framework

    我的需求是,希望将数据库中一个存储过程映射到EF中作为一个Function Import,然后希望在客户端能调用这个存储过程。

    我的问题是:如果我将这个Function的返回值映射为一个现有的Entity Type,则客户端调用没有任何问题(能收到数据)。但如果我将其结果映射为一个 Complex Type(假设我们没有现成的Entity Type可用),在客户端调用不会报告错误,但没有办法收到数据。

    我的存储过程

     

    ALTER PROCEDURE dbo.GetOrdersByTime
    (@time DATETIME)
    AS
    	SET NOCOUNT ON
    	SELECT * FROM Orders WHERE OrderDate >= @time
    	RETURN
    

     

    导入函数后,我在Data Service中编写了一个Operation

        [WebGet]
        public IQueryable<MyOrder> GetOrders()
        {
          return this.CurrentDataSource.GetOrders(new DateTime(2010, 4, 1)).AsQueryable(); 
        }

    如果直接在服务器端,浏览svc文件,输入类似下面的地址

    http://localhost:22321/WcfDataService.svc/GetOrders

    以上的请求可以收到数据

     <?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
    - <GetOrders xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
    - <element p2:type="TestModel.MyOrder" xmlns:p2="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
     <OrderId p2:type="Edm.Int32">2</OrderId> 
     <OrderDate p2:type="Edm.DateTime">2010-05-01T00:00:00</OrderDate> 
     </element>
     </GetOrders>

    这表示这个函数是可以正常工作的。

     

    接下来,我创建客户端的Service Reference,然后通过如下的代码尝试去执行查询

     

          var ctx = new DataService.TestEntities(new Uri("http://localhost.:22321/WcfDataService.svc/"));
          var query = ctx.Execute<DataService.TestModel.MyOrder>(new Uri(ctx.BaseUri, "GetOrders")).ToArray();
    
          
          
    
          foreach (var item in query)
          {
            MessageBox.Show(item.OrderId.ToString());
          }
          

    上面的代码能够执行,但没有返回任何结果。在调试状态下设置断点查看,query返回的是一个空的集合。但是我在Fiddler中查看,却明明是有数据的。和我们之前在服务器端直接请求所得到的数据是一样的

     <?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
    - <GetOrders xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
    - <element p2:type="TestModel.MyOrder" xmlns:p2="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
     <OrderId p2:type="Edm.Int32">2</OrderId> 
     <OrderDate p2:type="Edm.DateTime">2010-05-01T00:00:00</OrderDate> 
     </element>
     </GetOrders>

     

    不知道大家是否遇到过类似的问题,有什么好的意见么,请多指教,谢谢

     

     

    2010年6月15日 上午 08:30

解答

  • Dear Ares,

             簡單的回答  'WCF RIA Services doesn't support ComplexTypes....'        

        最快的解法是建立View,然後將傳回值設成View.

    Regards,

     


    MVP 2008 - Visual Developer ASP/ASP.NET My Blog: http://blog.csdn.net/Code6421
    • 已提議為解答 Lolota Lee 2010年6月22日 上午 08:10
    • 已標示為解答 Lolota Lee 2010年6月22日 上午 08:51
    2010年6月22日 上午 05:49