2011-01-08 11 views
-1

私はクライアント側(Silverlightクライアントアプリケーション)で3つのモデルを提出する必要があるウィンドウがあるとします。私の問題は、私がフォームを送信するたびに、私はクライアントから渡されたサーバー側のデータが空です。DomainService - WCFで複数のパラメータを渡す方法

パラメータとして複数のオブジェクトを渡すのではなく、モデルを含むネストされたクラスを使用しましたが、再び機能しませんでした。私は、クライアントからサーバー(DomainService)にデータを渡すために、このモデルを埋める

[DataContract] 
public class PersonnelDTO : EntityObject 
{ 
    [Key] 
    [DataMember] 
    public int PersonnelId { get; set; } 

    [Include] 
    [DataMember] 
    [Association("Personnel_ID", "PersonnelId", "Personnel_ID")] 
    public Personnel Personnel { get; set; } 

    [Include] 
    [DataMember] 
    [Association("Personnel_Info_ID", "PersonnelId", "Personnel_Info_ID")] 
    public Personnel_Info PersonnelInfo { get; set; } 
} 

マイ人事データ転送オブジェクトコードは次のようなものです。 とはまた私のドメインサービスコードは次のとおりです。

[Invoke] 
    public void AddPersonnel(PersonnelDTO personnelDTO) 
    { 
     // Model are EMPTY in DTO 
     ObjectContext.AddToPersonnels(personnelDTO.Personnel); 
     ObjectContext.AddToPersonnel_Info(personnelDTO.PersonnelInfo); 
     ObjectContext.SaveChanges(); 
    } 

方法は、一般的なリストが含まれるWCFサービスで複数のパラメータを渡す方法があれば、私は知りません。

ありがとうございます。

+0

DomainServiceには既にメソッドがありますか?すでに行ったことのサンプルを提供できますか?これは、問題をあなたが助けたいと思う潜在的な人々にもっと鮮明に直面しているでしょう... – scartag

答えて

2

まず、サービスメソッドでInvokeを使用したくないです。挿入操作が必要です。だからあなたの方法は次のようになります。

public void InsertPersonnel(PersonnellDTO personnelDTO) 

不要を自動的方法の命名の慣習によって、それを生成しますRIAとして[挿入]属性のため。

RIAがキーをどのように処理するかは、次に取り組まなければならないハードルです。キーを使用して変更追跡を決定します。 DEFAULT - 送信しているオブジェクトがNEWではないと思った場合、RIAはEMPTYオブジェクトをサービスレイヤーに送ります。それは帯域幅を節約するためです。

オブジェクトをDTOにラップしています。私の経験から、このシナリオではRIAは実際にうまく動作しません。実際に期待されるのは、PersonnelInfoオブジェクトを子として、PersonnelIdをキーとして持つPersonnelオブジェクトです。次に、キーが正しく更新されるように、IsForeignKey = trueでアソシエーションを設定する必要があります。

サンプルアプリケーションで使用している複雑なルート集約オブジェクトの例を掲載します(私はPOCOとOracleでRIAを使用していますが、動作しますが、考え出す)。

[MetadataType(typeof (TicketMetadata))] 
    public partial class Ticket 
    { 
    internal sealed class TicketMetadata 
    { 
     [Key] public int TicketId; 

     [Required] 
     public DateTime IncidentDate; 

     [Required(ErrorMessage = "Missing Customer")] 
     public int CustomerId; 

     [Required(ErrorMessage = "Missing Product")] 
     public int ProductId; 

     [Include] 
     [Association("Ticket_Customer", "CustomerId", "CustomerId", IsForeignKey = true)] 
     public Customer Customer; 

     [Include] 
     [Association("Ticket_Product", "ProductId", "ProductId", IsForeignKey = true)] 
     public Product Product; 

     [Include] 
     [Composition] 
     [Association("Ticket_TicketActions", "TicketId", "TicketId")] 
     public List<TicketAction> TicketActions; 
    } 
    } 

アソシエーションと外部キーが動作し、オブジェクト構造を再考し、おそらくDTOから離れる方法を調べることをおすすめします。右に行って、すべてがうまくいきます。

+0

返事のためにクリスようこそありがとう、私はそれをテストします。再度、感謝します。 – saber

関連する問題