2

私は、クライアントが単純なタスクを実行するためにサーバーと通信する必要がある単純なアプリケーションを作成しています。サーバーは、データベースとWCFサービスで構成されています。クライアントはサービスとデータベースに接続します。

ado.netエンティティデータモデルを使用して、データベースにCRUD操作を作成しています。クライアントにサービスを介してCRUD操作を作成させ、クライアントがデータベースに接続しないようにします。

エンティティオブジェクトを返すサービスでメソッドを作成すると、例外が発生します。たとえば、私は次の方法を持っています:

    public Data.Scheduling[] GetSchedules()
    {
        Data.TCEntities1 entities = new Data.TCEntities1();

        var a = entities.Schedulings.ToArray();

        return a;
    }

Schedulingsメソッドを機能させるために、クラスや他のエンティティクラスを再作成したくありません。クライアントをデータベースに接続せずに、wcfクラスライブラリサービスを介して作成、読み取り、更新、および削除の操作を公開するにはどうすればよいですか?

編集

それが混乱している場合の私の問題の詳細な説明:

サーバーアプリケーション(wcfサービス)には、基本的な機能に加えて、ado.netエンティティデータクラスがあります。私はado.netエンティティデータクラスを持っているので、次のようにしてデータベースから結果を非常に簡単に抽出できます。

    Data.TCEntities1 entities = new Data.TCEntities1();
    var a = entities.Schedulings.ToList(); // schedulings is a table in my database

ご覧のとおり、これらの行はデータベース内のテーブルスケジューリングからすべてのスケジューリング行を取得し、作業するエッセイになります(リストがあります)。wcfサービスでエラーが返されるのになぜエラーが発生するのList<Data.Scheduling>ですか?クライアントが非常に単純な操作を実行するだけなので、クライアントがデータベースを照会しないようにします(データベースには2つのテーブルしかない)。

4

2 に答える 2

1

WCF はコントラクトを公開することで機能します。ADO.NET データモデルを使用しているため、自動生成された「部分」クラスが得られます。これらは、クライアント側で動作させるために WCF で必要とされるDataContractorでマークされていません。DataMemberいずれにせよ、部分クラスを新しいクラス/ファイルにコピーし、クライアントに表示されるように属性を追加する必要があります。

[DataContract]
public partial class Entity1
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Property1 { get; set; }

    [DataMember]
    public string Property2 { get; set; }
}
于 2012-10-20T17:30:12.147 に答える
0

これは紛らわしい質問です。CRUD WCF 呼び出しを作成し、クライアントが CRUD 関数を呼び出します。サービスはデータベースと対話します。クライアントはサービスと対話します。クライアントはデータベースと通信しません。

于 2012-10-20T17:09:03.527 に答える