2012-01-20 57 views
0

我有一個項目,我對工作有對的OrderItems導航屬性Order實體:

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; } 
} 

如果我查詢的OrderItems像這樣:

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

它運作良好,但我最終只需要綁定到訂單。所以,我想這樣的項目:

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

但是,我收到'未實現'異常。

Th項目正在使用EntityFramework代碼第一個4.1數據提供程序,並且所有連線「顯示」正確。我添加的唯一東西是路由,通過IDispatchMessageInspector產生乾淨的平靜uris並支持$ format選項。

好,多虧了維特克的輸入我能得到一個更完整的異常:

<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

如果使用EF代碼首先,它需要定義服務爲DataService的和覆蓋的createDataSource使用的伎倆在本文的第5節中描述:http://social.technet.microsoft.com/wiki/contents/articles/5234.aspx

否則WCF DS將DbContext視爲反射提供程序,並運行用於LINQ to Objects的查詢。這主要適用,但對於更復雜的查詢,它有時會中斷。如果WCF DS知道它再次運行EF,則它會爲EF始終創建查詢。

+0

就是這樣。我遵循指示,現在它就像一個魅力。非常感謝Vitek! – RockyMountainHigh