2010-08-15 59 views
0

我有一個解決方案,我設計了5層。將DTO從單獨的項目傳遞到UI層WCF RIA服務

它們是:

  • UI /表示層
  • 服務層
  • 業務邏輯層
  • 數據訪問層
  • DTO /公共層(IQUTECHDTO)

我想將DTO傳遞給用戶界面。下面是公開我想要返回VendorDTO的方法GetVendors的服務層。該對象將填充一個下拉框。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.ServiceModel.DomainServices.Hosting; 
using System.ServiceModel.DomainServices.Server; 
using IQUTechDTO; 
using IQUTECHDAL; 

namespace BusinessApplication6.Web.Services 
{ 

    public class Foos 
    { 

     [Key] 

     public int FooId { get; set; } 

     public string Name { get; set; } 

    } 

    // TODO: Create methods containing your application logic. 
    [EnableClientAccess()] 
    public class BillService : DomainService 
    { 

     public IEnumerable<Foos> GetFoos() 
     { 
      return new List<Foos> { new Foos { FooId = 42, Name = "Fred" } }; 
     } 

     [Query] 
     public IEnumerable<VendorDTO> GetVendors() 
     { 
      return new List<VendorDTO> { new VendorDTO { VendorID = 42 } }; 
     } 

    } 
} 

當我嘗試創建VendorDTO類型的對象時,在UI .cs文件中,我不能。然而,我卻能夠從UI層訪問Foo對象。

的VendorDTO被標記爲serialazble但這卻居住在一個單獨的項目(IQUTECHDTO)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel; 
using System.ServiceModel.DomainServices; 
using System.ServiceModel.Web; 


namespace IQUTechDTO 
{ 
    public enum LoadStatus 
    { 
    Initialized = 0, 
    Ghost = 1, 
    Loaded = 2 
    } 

    [Serializable] 
    public class VendorDTO 
    { 
     /// <summary> 
     ///DTO for the 'Vendor' object. 
     /// </summary> 

     public VendorDTO() 
     { 
      this.loadStatus = LoadStatus.Initialized; 
     } 

     ///<summary> 
     /// Copy constructor 
     ///</summary> 
     public VendorDTO(VendorDTO sourceDTO) 
     { 
      loadStatus = sourceDTO.loadStatus; 
      VendorID = sourceDTO.VendorID; 
      VendorName = sourceDTO.VendorName; 
      VendorAddress1 = sourceDTO.VendorAddress1; 
      VendorAddress2 = sourceDTO.VendorAddress2; 
      VendorCity = sourceDTO.VendorCity; 
      VendorState = sourceDTO.VendorState; 
      VendorEmail = sourceDTO.VendorEmail; 
      VendorPhone = sourceDTO.VendorPhone; 
      VendorPOC = sourceDTO.VendorPOC; 
      VendorRegion = sourceDTO.VendorRegion; 
     } 

     public LoadStatus loadStatus; 

     [Key] 
     public int VendorID { get; set; } 
     public string VendorName; 
     private string VendorAddress1; 
     private string VendorAddress2; 
     private string VendorEmail; 
     private string VendorPhone; 
     private string VendorCity; 
     private string VendorState; 
     private string VendorPOC; 
     private string VendorRegion; 

    } 
} 

下面是UI類

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Windows.Navigation; 
using BusinessApplication6.Web.Services; 
using System.ServiceModel.DomainServices.Client; 
using BusinessApplication6.Web; 


namespace BusinessApplication6.Views.BOM 
{ 
    public partial class BOMCRUD : Page 
    { 
     public BOMCRUD() 
     { 
      InitializeComponent(); 
      LoadTree(); 


     } 

     public void LoadTree() 
     { 
      BillContext newCon = new BillContext(); 


      //This works 
      Foos fooobj = new Foos(); 

      //This doesnt work 
      VendorDTO vendorobj = new VendorDTO(); 

     } 



     // Executes when the user navigates to this page. 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
     } 



    } 
} 

爲什麼它不讓我訪問該對象。

您的幫助將不勝感激。

問候, 湯姆

回答

0

的UI類具有不必IQUTECHDTO參考像Foos類做(在BusinessApplication6.Web)。

+0

當我嘗試將項目引用添加到IQUTECHDTO時,它表示您只能將此項目引用添加到此解決方案中的其他Silverlight項目。當我嘗試將UI層的引用添加到DTO庫時會發生這種情況。 – TommyK 2010-08-16 19:07:37

+0

@TommyK - 由於您使用的是Silverlight,因此您的DTO應該是Silverlight類庫。只要沒有Silverlight不支持的代碼,就可以從服務器和客戶端鏈接到一個.cs文件。看看http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight的一些想法。 – DaveB 2010-08-16 19:43:32