不确定我是否理解这个问题。您是否尝试在对服务的一次调用中返回所有这些信息,并想知道对于具有所有这些关系(并且很可能是循环引用)的此类对象图的数据协定是什么?
我可能对最新信息的问题更加困惑,但我会对此进行最后一次尝试。我想更令人困惑的是对“实体”一词的引用。这更像是一个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。
您列出了许多接口,我假设它们包含您的服务的操作和数据合同。您不一定需要按实体分解您的服务,并且可能会混淆将某些操作和数据合同放在哪里。如果服务返回多个实体的信息,您将需要在您的服务中重复数据合同。按实体拆分服务不会带来太多好处,只会让您和服务的任何用户更加困难。