2

Visual Studio 2012を使用しており、C#で開発しています。WCF Webサービスの作業を開始したばかりで、モデルファーストのアプローチでデータベースを作成しました。これまでのところ、単純なテーブルにエントリを挿入、更新、削除、および取得できましたが、問題が発生しました。別のテーブルと関係があるテーブルのパラメーターを送信する方法がわかりません。

私の疑問をよりよく説明するために、ここに例があります。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; }
}

このような関係で、どうすれば新しいクラスターを追加できますか?新しいクラスターを追加するためのエンドポイントは、JSON文字列である文字列を受け取り、それをクラスターオブジェクトに逆シリアル化します。私はこのように逆シリアル化します:

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

この場合、JSON文字列に送信する情報はクラスターが属するリージョンのみです(オブジェクトが作成されたときの日時はサーバー側に追加されます)が、どのように送信しますかリージョン情報をJSONに追加して、クラスターに追加できるようにしますか?

つまり、次のようなJSON文字列を送信する必要がありますか?

{"RegionId":2}

そうすると、エントリが作成されないので、他に何かする必要がありますか?

私はEFおよびWCFWebサービスを使用するのは初めてですが、助けていただければ幸いです。

4

1 に答える 1

0

私が集めたものから、あなたはあなたのclusetersを救う2つの方法があります。最初のものは、貯蓄または地域の副産物としてのものです。基本的なCRUDWCFエンドポイントがある場合は、クライアントでリージョンエンティティを構築し、クラスターを追加してから、保存を呼び出すだけです。

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

もう1つのオプションは、クラスター自体を保存するように設計されたWCFエンドポイントを介してクラスターを保存することです。これを行う前に、RegionIdフィールドを明示的に持つようにClustersエンティティを変更することをお勧めします。

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 に答える