3

ここで重要な(または単純な)何かが欠けているように感じますが、これを機能させることはできません。


ASP.NET(.NET 4.0)Webアプリケーションプロジェクトを作成しました。このプロジェクトでは、WCFデータサービスをホストしています。既存のデータベースからPOCOエンティティのEF5.0モデルを生成しました。通常、エンティティクラスはpartialです。

思った、

ねえ、私はこれらの部分的なクラスを「拡張」して、データサービスの追加の(永続化されていない、計算された)プロパティを公開します

*簡潔にするために、とを連結するプロパティを追加したいエンティティを想定しましょPersonう。FullNameFirstNameLastName

とにかく、私はpartialクラスを続けて仕事をしています(もちろん同じ名前空間で

public partial class Person {
    public string FullName {
        get { return this.FirstName + " " + this.LastName; }
    }
}

Personただし、サービス内のエンティティをクエリすると、いいえFullName。サービスのをクエリすると$metadata、の定義がありませんFullName

これをサポートするために(もしあれば)何をする必要がありますか?


ノート

  • すべてのエンティティはを介して表示されますconfig.SetEntitySetAccessRule("*", EntitySetRights.All);
  • EdmScalarPropertyAttributeプロパティを含め、さまざまな属性で装飾しようとしましたが、成功しませんでしDataMemberAttributeた。
4

2 に答える 2

2

.NET 4.5で変更されない限り(私は見ていません)、それは機能しないと思います。DataService<T>非常に限られています。すべてのEF機能をサポートしているわけではありません。データサービス自体は非常に柔軟性があり、必要なものをすべて返す完全にカスタムのサービスを定義できます。ただし、EFコンテキストの「自動」マッピングは取得できません。

そのため、残念ながら、「簡単だが制限されている」と「難しいが柔軟」のどちらかを選択する必要があり、その間にはほとんど何もありません。

于 2012-11-14T13:01:45.793 に答える
1

この優れた投稿で説明されているように、POCOを使用する別の方法があります:http://www.codeproject.com/Articles/514598/Understanding-OData-v3-and-WCF-Data-Services-5-x ( POCOを使用したWCFデータサービスの作成セクション)

基本的にそれはこれを説明しています:

POCOエンティティを次の属性で装飾できます。

[DataServiceEntity]
[DataServiceKey("Id")]
public class MyClass
{
     public int Id { get; set; }
}

次に、エンティティコレクションの静的IQueryable<>メンバーを公開するクラスを作成します。

public class MyClassesDataSource
{

    public static IQueryable<MyClass>
    {
         get
         {
             ... // You can access your EF context here
         }
    }
}

最後に、から派生してサービスを作成する代わりに、から派生しDataService<YouObjectContext>ますDataService<MyClassesDataSource>

今、私はそのデータソース内でEFコンテキストを処理する最良の方法を理解しようとしています:)

于 2013-02-21T13:32:48.263 に答える