2

我正在使用 Visual Studio 2012 并在 C# 上进行开发。我刚开始使用 WCF Web 服务,我通过 Model First 方法创建了数据库,到目前为止,我已经能够在简单的表中插入、更新、删除和获取条目,但是我遇到了一个问题:我不知道如何为与另一个表有关系的表发送参数。

为了更好地解释我的疑问,这里有一个例子:我有一个 Regions 表,然后我有另一个名为 Clusters 的表,一个区域有许多集群,一个集群属于一个区域。

EF 创建的结果类如下所示:

public partial class Regions
{
    public Regions()
    {
        this.Clusters = new HashSet<Clusters>();
    }

    public int RegionId { get; set; }
    public string Name { get; set; }
    public string Point { get; set; }
    public System.DateTime CreatedDateTime { get; set; }
    public System.DateTime UpdatedDateTime { get; set; }

    public virtual ICollection<Clusters> Clusters { get; set; }
}

public partial class Clusters
{

    public int ClusterId { get; set; }
    public System.DateTime CreatedDateTime { get; set; }
    public System.DateTime UpdatedDateTime { get; set; }

    public virtual Regions Region { get; set; }
}

有了这种关系,我怎么能添加一个新的Cluster呢?我添加新集群的端点接收到一个字符串,它是一个 JSON 字符串,我将它反序列化为一个集群对象。我这样反序列化:

 Clusters cluster = new JavaScriptSerializer().Deserialize<Clusters>(data); //data is the JSON string

在这种情况下,我将发送到 JSON 字符串的唯一信息将是集群所属的区域(创建对象时的 DateTime 正在服务器端添加),但是我如何发送将区域信息转换为 JSON 以便可以将其添加到集群中?

我的意思是,我必须发送一个看起来像这样的 JSON 字符串吗?

{"RegionId":2}

因为如果我这样做,就没有条目,我还需要别的吗?

我对使用 EF 和 WCF Web 服务真的很陌生,任何帮助都将不胜感激。

4

1 回答 1

0

据我所知,您有两种保存集群的方法。第一个是作为储蓄或地区的副产品。如果您有基本的 CRUD WCF 端点,您可以简单地在客户端中构建您的区域实体,添加集群,然后调用 save.

var reg = new Region();
//set region properties
//build clusters set
for (int i = 0; i<5; i++)
    reg.Clusters.add (new Cluster {CreatedDateTime= DateTime.Now, 
                                   UpdatedDateTime = DateTime.Now});

wcfClient.SaveRegion(reg); //<-- if the back-end works with EF, this should be able 
                           //to insert one new region with five new clusters

您的另一个选择是通过旨在保存集群本身的 WCF 端点来保存集群。在执行此操作之前,我建议您修改集群实体以明确具有 RegionId 字段。

public partial class Clusters
{

    public int ClusterId { get; set; }
    public System.DateTime CreatedDateTime { get; set; }
    public System.DateTime UpdatedDateTime { get; set; }

    public int RegionsId {get; set;}
    public virtual Regions Region { get; set; }
}

实体框架应该能够自动识别 RegionsId 对应于 Regions 实体的主键。在此之后,只需确保您创建的每个集群都具有正确的 RegionsId 属性。当您调用“wcfClient.SaveCluster(cluster)”方法时,EF 会自动将该集群链接到正确的区域。

于 2013-01-09T08:44:16.433 回答