2009-05-19 9 views
0

ロード用のEntity Frameworkオブジェクト(および負荷を軽減するために使用される他のいくつかの構造体と単純なクラス)を生成するWCFサービスがあり、それをクライアントアプリケーションに送信します。WCFサービスでのインターフェイス定義の送信

クラスを2つ変更して、アプリケーションで1つのオブジェクト型として参照できるように、インターフェイスを実装しました。 Is it Possible to Force Properties Generated by Entity Framework to implement Interfaces?

ただし、インタフェースタイプはWCFサービスプロキシクライアントのthingymebobに追加されません。これは、ワイヤを介して返送されるオブジェクトで直接参照されないためです。

は、そのためのサービスプロキシクラスを使用しています私のアプリケーションでは、私は私のインターフェイスをキャストしたり参照することはできません。..

任意のアイデア私が欠けている何か?ここで

は、いくつかのサンプルコードです:

//ASSEMBLY/PROJECT 1 -- EF data model 

namespace Model 
{ 
    public interface ISecurable 
    { 
     [DataMember] 
     long AccessMask { get; set; } 
    } 

    //partial class extending EF generated class 
    //there is also a class defined as "public partial class Company : ISecurable" 
    public partial class Chart : ISecurable 
    { 
     private long _AccessMask = 0; 
     public long AccessMask 
     { 
      get { return _AccessMask; } 
      set { _AccessMask = value; } 
     } 

     public void GetPermission(Guid userId) 
     { 
      ChartEntityModel model = new ChartEntityModel(); 
      Task task = model.Task_GetMaskForObject(_ChartId, userId).FirstOrDefault(); 
      _AccessMask = (task == null) ? 0 : task.AccessMask; 
     } 
    } 
} 

//ASSEMBLY/PROJECT 2 -- WCF web service 
namespace ChartService 
{ 
    public Chart GetChart(Guid chartId, Guid userId) 
    { 
     Chart chart = LoadChartWithEF(chartId); 
     chart.GetPermission(userId); //load chart perms 
     return chart; //send it over the wire 
    } 
} 
+0

クライアントでサービスリファレンスまたはWeb参照を使用していますか?プロジェクト2のプロジェクト1を参照していますか?私はサービス参照がデフォルトで参照される型を再利用すると信じています。 – JohnOpincar

+0

私はクライアントアプリケーションで直接サービスアプリケーションからタイプを参照していません。私は以前これを行うことについて考えていましたが、依存性を最小限に抑えるために2つのアプリケーション間の壁を保つことに決めました。私がEF/WCFプロジェクトへの参照を含めるつもりならば、それを1つのアプリとして書いただけかもしれません。 – misteraidan

答えて

1

のインターフェイスは、あなたのWSDLで別々のエンティティとして全体来ることはありません - 彼らは単に彼らの方法や、それらを公開するオブジェクトに追加されたプロパティを持つことになります。

達成したいことは、抽象クラスを使用して行うことができます。これらは別個の実体として出現するでしょう。

幸運。進んでいく方法を教えてください。

+0

あなたは正しいですが、この問題に対する答えはありません。エンティティ・フレームワークのパーシャルは、抽象クラス(または、そのエンティティ・モデルの一部ではないクラス)から継承することはできません。だから私のモデルでは、私はまだ構造体をソートしたままにするためのインタフェースを使用していますが、クライアントアプリケーションでは、プロパティをチェックするためにリフレクションを使用しています(2つしかありません)。とにかく無効なオブジェクトパラメータが渡された場合、WCFサービスメソッドは失敗します。 乾杯。 – misteraidan

関連する問題