Ich habe einen complex das wie folgt aussieht (es ist in Niederländisch)Complex Adresse verschwindet, wenn ich ein in OData WebAPI erweitern verwenden
namespace Omnisoft.Domain.ComplexTypes
{
// <ComplexType> _[KnownType(typeof(Adres))]
[DataContract(IsReference = false, Namespace = "")]
[XmlInclude(typeof(Adres))]
public class Adres
{
public Adres()
{
AdresLijn1 = "";
AdresLijn2 = "";
PostCode = "";
Gemeente = "";
Land = "BE";
// "BE"
//<Client_Adres_AdresLijn1></Client_Adres_AdresLijn1>
//<Client_Adres_AdresLijn2></Client_Adres_AdresLijn1>
}
[DataMember(), StringLength(50, ErrorMessageResourceName = "StringMaxLength", ErrorMessageResourceType = typeof(ValRes.ValidationStrings))]
[Display(Description="AdresLijn1", ResourceType = typeof(ViewRes.Address))]
public string AdresLijn1 { get; set; }
[DataMember(), StringLength(50, ErrorMessageResourceName = "StringMaxLength", ErrorMessageResourceType = typeof(ValRes.ValidationStrings))]
[Display(Description="AdresLijn2", ResourceType = typeof(ViewRes.Address))]
public string AdresLijn2 { get; set; }
[DataMember(), StringLength(10, ErrorMessageResourceName = "StringMaxLength", ErrorMessageResourceType = typeof(ValRes.ValidationStrings))]
[Display(Description="PostCode", ResourceType = typeof(ViewRes.Address))]
public string PostCode { get; set; }
[DataMember(), StringLength(50, ErrorMessageResourceName = "StringMaxLength", ErrorMessageResourceType = typeof(ValRes.ValidationStrings))]
[Display(Description="Gemeente", ResourceType = typeof(ViewRes.Address))]
public string Gemeente { get; set; }
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ValRes.ValidationStrings))]
[DataMember(), StringLength(2, ErrorMessageResourceName = "StringMaxLength", ErrorMessageResourceType = typeof(ValRes.ValidationStrings))]
[Display(Description="Land", ResourceType = typeof(ViewRes.Address))]
public string Land { get; set; }
[IgnoreDataMember]
public string ToSingleLine
{
get
{
if (string.IsNullOrEmpty(AdresLijn2))
{
return string.Format("{0} {1} {2}", AdresLijn1, PostCode, Gemeente);
}
else
{
return string.Format("{0}({1}) {2}", AdresLijn1, AdresLijn2, PostCode, Gemeente);
}
}
}
}
Ich habe es nicht überall jetzt definiert (es von modelbuilder.ComplexType entfernt), wenn der Fehler verschwindet für die Prüfung, aber ich keinen Unterschied feststellen, Hinzufügen oder Entfernen von [complex]
Dies ist ein Beispiel url:
Hier ist das Ergebnis für url/v1/Lieferanten apikey = ca2d711d-31f0-4f14 -9eb4-363921db894e & Format = JSON & $ top = 1: http://pastebin.com/CLzAeEFk (man beachte es eine Adresse hat)
Hier ist das Ergebnis für url/v1/Lieferant apikey = ca2d711d-31f0-4f14-9eb4-363921db894e & format = json & $ top = 1 & $ = TaxCode erweitern: http://pastebin.com/ysn6uMHA (beachten Sie keine Adresse)
Dies ist der Fehler, die ich für uRL erhalten: http://localhost:64829/v1/Supplier?apiKey=ca2d711d-31f0-4f14-9eb4-363921db894e&format=json& $ top = 1 & $ expand = TaxCode, Adresse
{
"Message":"An error has occurred.",
"ExceptionMessage":"Het doel van een aanroep heeft een uitzondering veroorzaakt.",
"ExceptionType":"System.Reflection.TargetInvocationException",
"StackTrace":" bij System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)\r\n bij System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)\r\n bij System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n bij System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n bij System.Web.OData.Query.ODataQueryOptions.LimitResults(IQueryable queryable, Int32 limit, Boolean& resultsLimited)\r\n bij System.Web.OData.Query.ODataQueryOptions.ApplyTo(IQueryable query, ODataQuerySettings querySettings)\r\n bij System.Web.OData.EnableQueryAttribute.ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)\r\n bij System.Web.OData.EnableQueryAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor)\r\n bij System.Web.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n bij System.Web.Http.Filters.ActionFilterAttribute.OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- Einde van stacktracering vanaf vorige locatie waar uitzondering is opgetreden ---\r\n bij System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n bij System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n bij System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
"InnerException":{
"Message":"An error has occurred.",
"ExceptionMessage":"Cannot compare elements of type 'Omnisoft.Domain.ComplexTypes.Adres'. Only primitive types, enumeration types and entity types are supported.",
"ExceptionType":"System.NotSupportedException",
"StackTrace":" bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.VerifyTypeSupportedForComparison(Type clrType, TypeUsage edmType, Stack`1 memberPath)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.CreateIsNullExpression(DbExpression operand, Type operandClrType)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.EqualsTranslator.CreateIsNullExpression(ExpressionConverter parent, Expression input)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.EqualsTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MemberInitTranslator.TypedTranslate(ExpressionConverter parent, MemberInitExpression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MemberInitTranslator.TypedTranslate(ExpressionConverter parent, MemberInitExpression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateSet(Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)\r\n bij System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()\r\n bij System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)\r\n bij System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__6()\r\n bij System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)\r\n bij System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.<GetResults>b__5()\r\n bij System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)\r\n bij System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)\r\n bij System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()\r\n bij System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()\r\n bij System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n bij System.Web.OData.Query.TruncatedCollection`1..ctor(IQueryable`1 source, Int32 pageSize)\r\n bij System.Web.OData.Query.ODataQueryOptions.LimitResults[T](IQueryable`1 queryable, Int32 limit, Boolean& resultsLimited)"
}
}
ich erhalte nicht die Fehler wenn Ich entferne Adresse von der Erweiterungsfunktion, aber es zeigt nicht auf der Entität auch an ...
Können Sie mir helfen, das Problem herauszufinden? Also kann ich den komplexen Typ in meiner Datenstruktur erweitern + anzeigen?
Ich verwende EF 6.1.3, 5.2.3 Asp.Net.MVC, Microsoft.AspNet.WebApi 5.2.3, ODataLib 6.15.0 und Microsoft.AspNet.OData 5.9.0
Es ist nicht automatisch ausgewählt, wenn ich etwas erweitern. Es wird automatisch ausgewählt, wenn ich kein $ expand verwende. Die Klasse Lieferant (Leverancier in Niederländisch) ist hier eingefügt http://pastebin.com/4TJzBtj7 (weil es zu lang ist) – NicoJuicy
Ich bin mir nicht sicher, welche Adresse (Adresse?), Können Sie helfen, diese Überprüfung, 1. Können Sie ~/$ Metadaten anfordern und sehen, ob Address ein ComplexType oder EntityType ist? 2. Wenn Sie sagten "Es wird nicht automatisch ausgewählt, wenn ich etwas erweitere", können Sie angeben, welche Eigenschaft? Und "Es wird automatisch ausgewählt, wenn ich kein $ expand verwende.", Was ist automatisch ausgewählt? 3. Was ist Ihre Erwartung? Wenn Sie eine komplexe Eigenschaft und eine Entitätstypeigenschaft (Navigationseigenschaft) auswählen möchten, müssen Sie nur die Entitätstypeigenschaft in $ expand angeben. – Vincent