2012-01-20 15 views
0

戻っ選択I私はそれに取り組んでいたプロジェクトがORDERITEMSためのナビゲーションプロパティがあるOrderエンティティています:私はそうのようなのOrderItemsを照会した場合

public class Order 
{ 
    public int OrderId { get; set; } 
    public int CustomerId { get; set; } 

    public virtual ICollection<OrderItem> OrderItems { get; set; } 
} 

public class OrderItem 
{ 
    public int OrderId { get; set; } 
    public int ProductId { get; set; } 
    public int Quantity { get; set; } 

    public virtual Order Order { get; set; } 
} 

を:

http://mysvc.com/mysvc/OrderItems?$expand=Order&$filter=ProductId eq 1234 

正常に動作しますが、最終的にオーダーにのみバインドする必要があります。だから、私はこのようにプロジェクトしたい:

http://mysvc.com/mysvc/OrderItems?$expand=Order&$filter=ProductId eq 1234&$select=Order 

しかし、私は '実装されていない'例外が表示されます。

プロジェクトは、EntityFrameworkコードの最初の4.1データプロバイダを使用しており、すべての配線が正しく表示されます。私が追加した唯一のものは、清潔で落ち着いたurisを生成し、IDispatchMessageInspectorを介して$ formatオプションをサポートするためのルーティングでした。これはEFコードファーストを使用している場合、それはトリックを使用するのDataServiceとしてサービスを定義し、CreateDataSourceを上書きする必要が

<error> 
    <code/> 
    <message xml:lang="en-US">Not Implemented</message> 
    <innererror> 
     <message>Unable to create a constant value of type 'System.Data.Services.Internal.ProjectedWrapper1'. Only primitive types ('such as Int32, String, and Guid') are supported in this context. 
     </message> 
     <type>System.NotSupportedException</type> 
     <stacktrace> at System.Data.Objects.ELinq.ExpressionConverter.ConstantTranslator.TypedTranslate(ExpressionConverter parent, ConstantExpression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.ConditionalTranslator.TypedTranslate(ExpressionConverter parent, ConditionalExpression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input) 

      at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding) 

      at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda) 

      at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) 

      at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) 

      at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) 

      at System.Data.Objects.ELinq.ExpressionConverter.Convert() 

      at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) 

      at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 

      at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() 

      at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() 

      at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.IEnumerable.GetEnumerator() 

      at System.Data.Services.Internal.ProjectedWrapper.EnumerableWrapper.System.Collections.IEnumerable.GetEnumerator() 

      at System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable) 
      </stacktrace> 
    </innererror> 
</error> 
+0

実際の例外とその呼び出しスタックを投稿してください。 –

答えて

2

OK]をクリックして、ビテックの入力のおかげで、私はより完全な例外を取得することができましたhttp://social.technet.microsoft.com/wiki/contents/articles/5234.aspx それ以外の場合は、WCF DSはDbContextをリフレクションプロバイダとして扱い、LINQ to Objects用のクエリを実行します。これは主に動作しますが、より複雑なクエリの場合は時々破損します。 WCF DSが再びEFを実行することを知っている場合、WFF DSは常に動作するEFのクエリを作成します。

+0

これはそれでした。私は指示に従って、それは今の魅力のように動作します。本当にありがとうVitek! – RockyMountainHigh

関連する問題