1

我正在尝试从我的 wcf 服务返回一个自定义类。我的代码在下面并出现错误。

服务器在处理请求时遇到错误。异常消息是 'DealerModel' 类型的属性 'UserList' 不是有效属性。不支持类型为基元或复杂类型集合的属性。有关更多详细信息,请参阅服务器日志。异常堆栈跟踪是:

我正在尝试获取如下所示的 json 值;

<Dealer>
        <DealerName/>
        <DealerAdress/>
        <Users>
              <FirstName/>
              <LastName/>
              <FirstName/>
              <LastName/>
        </Users>
</Dealer>

我的代码

using System;
using System.Linq;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

public class DataModel:IDisposable
{
    private xModel.xEntities _dbContext = new xSocialModel.xEntities();

    public DataModel()
    {
        Users = from e in _dbContext.Users
                select new UserModel
                {
                    UserID = e.UserID,
                    Firstname = e.Firstname,
                    Lastname = e.Lastname
                };

        Dealers = from e in _dbContext.Dealers
                  select new DealerModel
                  {
                      DealerID = e.DealerID,
                      DealerName = e.Name,
                      DealerAddress = e.Address,
                      UserList = e.Users
                  };

    }

    /// <summary>Returns the list of users.</summary>
    public IQueryable<UserModel> Users { get; private set; }

    public IQueryable<DealerModel> Dealers { get; private set; }


    void IDisposable.Dispose()
    {
        _dbContext.Dispose();
    }
}



    using System;
    using System.Data.Services.Common;
    using System.Runtime.Serialization;
    using System.Collections.Generic;
    using System.ServiceModel;
    using System.Data.Objects.DataClasses;
    using System.Linq;

    /// <summary>Represents a User.</summary>

    [DataServiceKey("UserID")]
    public class UserModel
    {
        public Guid UserID { get; set; }

        public string Firstname { get; set; }

        public string Lastname { get; set; }

    }


    [DataServiceKey("DealerID")]
    public class DealerModel
    {
        public Guid DealerID { get; set; }

        public string DealerName { get; set; }

        public string DealerAddress { get; set; }

        **public EntityCollection<xModel.User> UserList { get; set; }**

    }
4

1 回答 1

0

我也遇到了很多麻烦。投影似乎不如 RIA 服务使用的那么好。我将继续假设您使用的是实体框架。我发现这样做的唯一方法是在您的 edmx 中创建复杂类型。

为此,请打开您的 EDMX,然后在右侧窗格中选择模型浏览器。在“模型”节点下,您将看到“复杂类型”,右键单击并选择“创建复杂类型”。然后在同一个窗口中,您可以命名您的类型并为其提供各种罐装类型的属性。

从您的问题看来,您有一个列表属性。我无法使用包含其他实体的属性创建这些复杂类型。并不是说不可能,只是我无法弄清楚。

现在在您的 DataService 中,创建一个返回类型为新复杂类型的服务方法。在服务方法中,使用投影来填充对象(或列表)并像处理任何其他实体一样返回它。在前端,您需要将其称为服务方法而不是实体,否则 JSON 将与其他实体查询相似。

Sam Mueller 有一个关于使用这种技术的非常好的博客,请查看:http ://samuelmueller.com/2009/11/working-with-projections-and-dtos-in-wcf-data-services/

于 2012-07-30T13:06:43.223 回答