将DTO从单独的项目传递到UI层WCF RIA服务

时间:2010-08-15 21:37:49

标签: wcf service ria

我有一个我用5层设计的解决方案。

他们是:

  • UI /表示层
  • 服务层
  • 业务逻辑层
  • 数据访问层
  • DTO /公共图层(IQUTECHDTO)

我想将DTO传递给UI。下面是公开GetVendors方法的服务层,我想返回VendorDTO。该对象将填充一个下拉框。

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 } };  
        }

    }
}

在UI .cs文件中,当我尝试创建VendorDTO类型的对象时,我不能。然而,我能够从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)
        {
        }



    }
}

为什么不允许我访问此对象。

非常感谢您的帮助。

此致 汤姆

1 个答案:

答案 0 :(得分:0)

UI类没有像IQUTECHDTO类那样引用Foos(在BusinessApplication6.Web中)。