私はこの質問に関して多くの行き詰まりを考え出しています。おそらく、.NET 3.5 SP1はWCF契約でADO.NET Entity Frameworkエンティティをサポートしています。しかし、それに関する確かな情報を探すとき、私は多くの答えを得ていません。私はこの1つの断片をMSDNスレッドで見つけました。誰かこれに関する経験がありますか? [データ契約]はどうなりましたか。これだけですか。これにはそれほど資料がないのはなぜですか。
これはMicrosoftのTim Mallalieuからの回答です。
Entity Frameworkで生成されるエンティティタイプは、デフォルトではデータ契約です。次のようにEntity Designerで単純なモデルを作成したとします。cart Entity Typeは、デフォルトで、すべてのプロパティがデータメンバーとして注釈を付けられたDataContractです。これをWCFサービスで次のように使用します。
[ServiceContract]
public interface IService1
{
[OperationContract]
Cart[] AllCarts();
}
public class Service1 : IService1
{
public Cart[] AllCarts()
{
using (MSPetShop4Entities context = new MSPetShop4Entities())
{
var carts = from c in context.Carts select c;
return carts.ToArray();
}
}
}
エンティティはDataContractsなので、自分のサービスを適切に見せ、それをネットワークに送信することができます。
直接エンティティを返却しないことをお勧めします。残念ながら、MicrosoftはエンティティのDataContractの一部として実装固有のデータを含めることを選択しました。これは他のプラットフォームとは相互運用できないため、.NETバージョン間でも相互運用できない可能性があります。
代わりに、Data Transfer Objectパターンに従って、エンティティ内のデータのコピーであるPOCOクラスを返すようにしてください。動作はまったくありません。あなたはテーブルなどを表すためにそのようなクラスのリストを返すことができます。