1

好的,我有点困惑这如何与 wcf Web 服务一起工作。

我有

程序(与 ID 关联)
组 (GroupID)
标签 (TagsID)
用户 (UserID)

现在让我们说组与节目相关联,标签也与组相关联,并且与所有这些相关联的用户。

例如 Group CSharp与 Program Computing和标签webservicerest相关联,但 rest 标签也与 Group asp.net相关联我如何返回与 rest 关联的所有组?

我有:

IGroupService
IProgrammeService
ItagService
IUsers

如何关联它们并返回属于与标签等相关的组和组的用户?

4

1 回答 1

1

不确定我是否理解这个问题。您是否尝试在对服务的一次调用中返回所有这些信息,并想知道对于具有所有这些关系(并且很可能是循环引用)的此类对象图的数据协定是什么?

我可能对最新信息的问题更加困惑,但我会对此进行最后一次尝试。我想更令人困惑的是对“实体”一词的引用。这更像是一个EF问题吗?如果链接是 EF 的问题,我只能假设正在采用代码优先的方法。将组链接到标签的示例如下所示。

    public class Group
    {
        public Group()
        {
            Tags = new List<Tag>();
        }
        public string Name { get; set; }
        public List<Tag> Tags { get; set; }
    }

    public class Tag
    {
        public string Name { get; set; }
    }

要使用 Linq 查询具有特定标签的所有组,您可以执行以下操作:

        public List<Group> GetGroups(string TagName)
        {
            List<Group> groups = (from g in _program.Groups where 
             (from t in g.Tags where t.Name == TagName select t).Count() > 0 
              select g).ToList();
            return groups;
        }

如果您使用的是 SOAP,您将在客户端中创建一个代理并调用该服务,如下所示:

        string tagName = "rest";
        List<Group> groups = proxy.GetGroups(tagName);

如果您正在创建一个 REST API,那么它将是一个简单的 HTTP 请求:

http://server/api/GetGroups?tagName=rest

服务将在哪里返回代表组的 XML 或 JSON。

您列出了许多接口,我假设它们包含您的服务的操作和数据合同。您不一定需要按实体分解您的服务,并且可能会混淆将某些操作和数据合同放在哪里。如果服务返回多个实体的信息,您将需要在您的服务中重复数据合同。按实体拆分服务不会带来太多好处,只会让您和服务的任何用户更加困难。

于 2012-04-05T12:04:54.817 回答