2012-03-24 23 views
0

私はWCFでプロジェクトをやっています。そして私は2つの辞書を扱わなければならない:1つはユーザのリストであり、もう1つはグループのリストである。 これは、適切なメッセージを作成することで、ユーザーとグループの作成、削除、検索ができます。しかし、私はまだグループにユーザーを追加することについて無知です。 そのため、ユーザーにはグループの一部としての参照があり、グループにはユーザー数が含まれています。 詳細が必要な場合はお知らせください。辞書を参照するWCF

ユーザー辞書:

private Dictionary<string, User> Users = new Dictionary<string, User>(); 

ユーザーデータの契約:

[DataMember(Name = "ID")] 
    public string ID; 
    /** 
    * First name of the User 
    */ 
    [DataMember(Name = "firstname")] 
    public string FirstName; 
    /** 
    * Last name of the User 
    */ 
    [DataMember(Name = "lastname")] 
    public string LastName; 
    /** 
    * The group that the User on 
    */ 
    [DataMember(Name = "group")] 
    public string Group; 

グループ辞書

private Dictionary<string, Group> groups = new Dictionary<string, Group>(); 

グループデータ契約

[DataMember(Name = "number")] 
public string Number; 
/** 
* The name of the group 
*/ 
[DataMember(Name = "group name")] 
public string GName; 

ありがとうございます。

+0

あなたのコード解説はC/C++スタイルです。 .Netは通常 "///

...."となります。それを見てみましょう! :) –

+1

そして...質問は何ですか? –

+0

ここに質問はありません。 –

答えて

1

ユーザーにグループの参照を追加し、ユーザーにグループを追加すると、コードの臭いであるcircular referenceが作成されます。最善の方法は、もう一方の部分のみを参照することです。

リレーションシップデータベースと同じように、UserGroupの関係の順序を記述します。この場合、1:N(1対多):多くのユーザーがグループに属しているか、グループに多数のユーザーが存在します。だから、データベースと同じように、「多くの部」は「1」の部分への参照を取得します。

[DataContract] 
class User 
{ 
    [DataMember(Name = "ID")] 
    public string ID; 

    /** 
    * First name of the User 
    */ 
    [DataMember(Name = "firstname")] 
    public string FirstName; 

    /** 
    * Last name of the User 
    */ 
    [DataMember(Name = "lastname")] 
    public string LastName; 

    /** 
    * The group that the User on 
    */ 
    [DataMember(Name = "group")] 
    public Group Group; 
} 

グループは、そのユーザーについて何も知らないだろうが。

[DataContract] 
class Group 
{ 
    /** 
    * The name of the group 
    */ 
    [DataMember(Name = "group name")] 
    public string GName; 
} 

しかし、これを逆のナビゲーションがあることも意味します。グループからユーザーに直接ナビゲートすることはできません。これが必要な場合は、グループのクラスにユーザーのリストを保持させ、ユーザーにはグループについては何も知らないようにすることで、ユーザーとグループの関係を逆転させることができます。

最後の点は、WCFがこの構造を正しくシリアル化するためには、データコントラクトの単一インスタンスに貼り付ける必要があります。そうでなければ、WCFは、ユーザーで参照されるグループが実際にあなたのリストの一部そのグループの:

[DataContract] 
class GroupsAndUsers 
{ 
    public List<User> Users { get; set; } 

    public List<Group> Groups { get; set; } 
} 

最後に、あなたのグループやユーザーデータ契約はpublicフィールドを使用しています。これはネットでの良い習慣ではありません:properties or auto-propertiesに変換してください。

関連する問題