2016-08-10 4 views
0

エンティティオブジェクトの配列(EOCを使用するPOCO)をロードして返すステートレスサービスがあります。遅延読み込みとプロキシの作成が無効になっています。私は別のレベルを含めたい場合は、物事が悪い方法では南に行く、しかしサービスファブリックステートレスサービスがPOCOオブジェクトグラフを返すときのCOMException

var devices = context.Devices.Where(d => d.ParentHost_Id == hostId); 
return Task.FromResult(devices.ToArray()); 

var devices = context.Devices.Where(d => d.ParentHost_Id == hostId).Include(d => d.ConnectedDevices); 
return Task.FromResult(devices.ToArray()); 

すべては、私が唯一の単一レベルのグラフを返すよううまく限り作品です

この場合、私のコードは要求されたオブジェクトをロードして問題なく返しますが、コールチェーンの上流のどこかでService FabricがCOMExceptionをスローし、その後私のサービスを再び呼び出すことによって処理します。この結果、新しいCOMExcetionが作成され、停止するまでこれを続けます。

{System.Runtime.InteropServices.COMException (0x80071C4C): Undantag från HRESULT: 0x80071C4C 
vid Microsoft.ServiceFabric.Services.Communication.FabricTransport.Common.NativeServiceCommunication.IFabricServiceCommunicationClient.EndRequest(IFabricAsyncOperationContext context) 
vid Microsoft.ServiceFabric.Services.Communication.FabricTransport.Client.NativeServiceCommunicationClient.EndRequest(IFabricAsyncOperationContext context)} 

デバイスクラスは、EFによって生成され、このようになりますされています。これがいただければ幸いですなぜ起こるの

public partial class Devices 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Devices() 
    { 
     this.LogValues = new HashSet<LogValues>(); 
    } 

    public long Id { get; set; } 
    public int DeviceId { get; set; } 
    public int Type { get; set; } 
    public string Property { get; set; } 
    public string Name { get; set; } 
    public Nullable<long> ParentHost_Id { get; set; } 

    public virtual Hosts Hosts { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<LogValues> LogValues { get; set; } 
    public virtual ConnectedDevices ConnectedDevices { get; set; } 
} 

任意のアイデア!

答えて

1

明らかに、問題は私のオブジェクトグラフに循環参照が含まれていたことです(ConnectedDeviceにはDeviceへの参照が含まれていました)。私はEFモデルからそれを削除し、すべてが現在期待どおりに機能しています。