1

WCF Data Services 4.0を使用すると、階層データを返すことができません。EquipmentIdのコレクションを持つクラスEmployeeがあります。これらのEquipmentIdはネットワーク上で失われています。これが私のコードです:

public class ODataV2 : DataService<ODataV2Model>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.UseVerboseErrors = true;
        config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
}
public class ODataV2Model
{
    public ODataV2Model()
    {
        Employees = new List<Employee>{
            new Employee { Id = 1, Name="Doug", EquipmentIds = new List<Equipment> { new Equipment { Id = 1 },new Equipment { Id = 2 } }.AsQueryable()},
            new Employee { Id = 2, Name= "George", EquipmentIds = new List<Equipment> {new Equipment { Id = 3}, new Equipment { Id = 5} }.AsQueryable() }
        }.AsQueryable();
    }
    public IQueryable<Employee> Employees { get; private set; }
    public IQueryable<Equipment> EquipmentIds { get; private set; }
}
[DataServiceKey("Id")]
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IQueryable<Equipment> EquipmentIds { get; set; }
}
[DataServiceKey("Id")]
public class Equipment
{
    public int Id { get; set; }
}

その上でLinqPadを実行すると、次のようになります。 EquipmentIdが0の従業員

カウントが2のEquipmentIdの両方のコレクションが必要ですが、0があります。エラーは発生しませんが、データがクライアントに到達することはありません。

WCF Data Services v 5.0に切り替えたところ、.NET側では正常に機能しましたが、LinqPadでクエリを実行できなくなりました。これをv4.0で機能させる方法はありますか?

そうでない場合は、LinqPadをアップグレードしてodata v3(WCF Data Services 5.0)を認識する方法はありますか?

4

1 に答える 1

1

クエリ〜/ Employeesには、Employeeエンティティのみが含まれ、ナビゲーションプロパティのコンテンツは含まれません。これは、ペイロードサイズを減らすためです。ナビゲーションプロパティの一部を本当に含めたい場合は、たとえば〜/ Employees?$ expand=EquipmentIdsを指定するだけです。

于 2012-04-22T07:22:27.647 に答える