.net 4.0 WebApi+;OData=错误->&引用;属性不属于指定的类型";

.net 4.0 WebApi+;OData=错误->&引用;属性不属于指定的类型";,.net-4.0,asp.net-mvc-4,asp.net-web-api,odata,.net 4.0,Asp.net Mvc 4,Asp.net Web Api,Odata,我在URI中使用的任何OData命令都会显示以下错误 当我在没有任何配置/参数OData的情况下使用api时,效果非常好 但是任何$filter、$top或$skip都会生成以下错误: 代码 ApiController [Queryable] public IQueryable<Processo> get() { return _repositorio.Query<Processo>(); } [Queryable] public IQueryable<P

我在URI中使用的任何OData命令都会显示以下错误
当我在没有任何配置/参数OData的情况下使用api时,效果非常好
但是任何
$filter
$top
$skip
都会生成以下错误:

代码 ApiController

[Queryable]
public IQueryable<Processo> get()
{
    return _repositorio.Query<Processo>();
}
[Queryable]
public IQueryable<Processo> get()
{
    return _repositorio.Query<Processo>();
}
i正向查询实现

public IQueryable<T> Query<T>(params Expression<Func<T, object>>[] includeProperties)
    where T : class, IEntity
{
    return includeProperties.Aggregate<Expression<Func<T, object>>, IQueryable<T>>(Set<T>(), (current, includeProperty) => current.Include(includeProperty));
}
错误 带有进程类

public static void Register(HttpConfiguration config)
{
    // Controller Only -> To handle routes like `/api/pessoas`
    config.Routes.MapHttpRoute(
        name: "ControllerOnly",
        routeTemplate: "api/{controller}"
    );

    // Controller with ID -> To handle routes like `/api/pessoas/1`
    config.Routes.MapHttpRoute(
        name: "ControllerAndId",
        routeTemplate: "api/{controller}/{id}",
        defaults: null,
        constraints: new { id = @"^\d+$" } // Only integers 
    );

    // Controllers with Actions -> To handle routes like `/api/pessoas/getProfissoes`
    config.Routes.MapHttpRoute(
        name: "ControllerAndAction",
        routeTemplate: "api/{controller}/{action}"
    );

    config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
    config.Formatters.Remove(config.Formatters.XmlFormatter);
}
public class Processo : IEntity, IAuditable
{
    public DateTime CreateAt { get; set; }
    public string CreateBy { get; set; }
    public DateTime? UpdateAt { get; set; }
    public string UpdateBy { get; set; }

    public int Id { get; set; }

    public DateTime DataEntrada { get; set; }
    public virtual Modalidade Modalidade { get; set; }
    public virtual PassoExecucao PassoAtual { get; set; }

    public string Imovel { get; set; }
    public double ValorFinanciado { get; set; }
    public double ValorVenda { get; set; }
    public double? FGTS { get; set; }

    public virtual Pessoa Comprador { get; set; }
    public virtual Pessoa Proprietario { get; set; }

    public virtual Agencia Agencia { get; set; }
    public virtual Empresa Despachante { get; set; }
    public virtual Empresa Originador { get; set; }

    public virtual ICollection<File> Arquivos { get; set; }
    public virtual ICollection<Historico> Historicos { get; set; }
}
[Queryable]
public IQueryable<Pessoa> get()
{
    return _repositorio.Query<Pessoa>();
}


{
    "$id": "1",
    "Message": "An error has occurred.",
    "ExceptionMessage": "An item with the same key has already been added.",
    "ExceptionType": "System.ArgumentException",
    "StackTrace": "   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)\r\n   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)\r\n   at System.Web.Http.OData.Builder.EdmTypeBuilder.<GetEdmTypes>d__0.MoveNext()\r\n   at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext()\r\n   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)\r\n   at System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String containerNamespace, String containerName, IEnumerable`1 entityTypeConfigurations, IEnumerable`1 entitySetConfigurations)\r\n   at System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()\r\n   at System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()\r\n   at System.Web.Http.HttpActionDescriptorExtensions.<>c__DisplayClass1.<GetEdmModel>b__0(Object _)\r\n   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)\r\n   at System.Web.Http.HttpActionDescriptorExtensions.GetEdmModel(HttpActionDescriptor actionDescriptor, Type entityClrType)\r\n   at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)\r\n   at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)\r\n   at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)"
}
[可查询]
公共IQueryable get()
{
返回_repositorio.Query();
}

{
“$id”:“1”,
“消息”:“发生错误。”,
“ExceptionMessage”:“属性不属于指定的类型。\r\n参数名称:navigationProperty”,
“ExceptionType”:“System.ArgumentException”,
“StackTrace”:“位于System.Web.Http.OData.Builder.EntityTypeConfiguration.AddNavigationProperty(PropertyInfo navigationProperty,EdmMultiplicity multiplicity)\r\n位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.MapEntityType(EntityTypeConfiguration实体)\r\n位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.AddEntity(类型)\r\n位于System.Web.Http.OData.Builder.EntityTypeConfiguration.AddNavigationProperty(PropertyInfo navigationProperty,EdmMultiplicity multiplicity)\r\n位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.MapEntityType(EntityConfiguration实体)\r\n位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.MapTypes()\r\n位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetedModel()\r\n位于System.Web.Http.HttpActionDescriptorExtensions.c\u DisplayClass1.b\r\n位于System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey,Func`2 valueFactory)\r\n位于System.Web.Http.HttpActionDescriptor.GetedModel(HttpActionDescriptor actionDescriptor,类型entityClrType)\r\n位于System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n位于System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext,HttpResponseMessage response,Exception Exception)\r\n位于System.Web.Http.Filters.ActionFilterAttribute.c_uuDisplayClass2.b_u0(HttpResponseMessage response)\r\n位于System.Threading.Tasks.TaskHelperExtensions.c_uDisplayClass41`2.b_u40(Task`1 t)\r\n位于System.Threading.TaskHelperExtensions.TheImpl[TTask,TOuterResult](TTask任务,函数'2 continuation,CancellationToken CancellationToken,布尔运行同步)
}
使用Pessoa类

public static void Register(HttpConfiguration config)
{
    // Controller Only -> To handle routes like `/api/pessoas`
    config.Routes.MapHttpRoute(
        name: "ControllerOnly",
        routeTemplate: "api/{controller}"
    );

    // Controller with ID -> To handle routes like `/api/pessoas/1`
    config.Routes.MapHttpRoute(
        name: "ControllerAndId",
        routeTemplate: "api/{controller}/{id}",
        defaults: null,
        constraints: new { id = @"^\d+$" } // Only integers 
    );

    // Controllers with Actions -> To handle routes like `/api/pessoas/getProfissoes`
    config.Routes.MapHttpRoute(
        name: "ControllerAndAction",
        routeTemplate: "api/{controller}/{action}"
    );

    config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
    config.Formatters.Remove(config.Formatters.XmlFormatter);
}
public class Processo : IEntity, IAuditable
{
    public DateTime CreateAt { get; set; }
    public string CreateBy { get; set; }
    public DateTime? UpdateAt { get; set; }
    public string UpdateBy { get; set; }

    public int Id { get; set; }

    public DateTime DataEntrada { get; set; }
    public virtual Modalidade Modalidade { get; set; }
    public virtual PassoExecucao PassoAtual { get; set; }

    public string Imovel { get; set; }
    public double ValorFinanciado { get; set; }
    public double ValorVenda { get; set; }
    public double? FGTS { get; set; }

    public virtual Pessoa Comprador { get; set; }
    public virtual Pessoa Proprietario { get; set; }

    public virtual Agencia Agencia { get; set; }
    public virtual Empresa Despachante { get; set; }
    public virtual Empresa Originador { get; set; }

    public virtual ICollection<File> Arquivos { get; set; }
    public virtual ICollection<Historico> Historicos { get; set; }
}
[Queryable]
public IQueryable<Pessoa> get()
{
    return _repositorio.Query<Pessoa>();
}


{
    "$id": "1",
    "Message": "An error has occurred.",
    "ExceptionMessage": "An item with the same key has already been added.",
    "ExceptionType": "System.ArgumentException",
    "StackTrace": "   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)\r\n   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)\r\n   at System.Web.Http.OData.Builder.EdmTypeBuilder.<GetEdmTypes>d__0.MoveNext()\r\n   at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext()\r\n   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)\r\n   at System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String containerNamespace, String containerName, IEnumerable`1 entityTypeConfigurations, IEnumerable`1 entitySetConfigurations)\r\n   at System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()\r\n   at System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()\r\n   at System.Web.Http.HttpActionDescriptorExtensions.<>c__DisplayClass1.<GetEdmModel>b__0(Object _)\r\n   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)\r\n   at System.Web.Http.HttpActionDescriptorExtensions.GetEdmModel(HttpActionDescriptor actionDescriptor, Type entityClrType)\r\n   at System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)\r\n   at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)\r\n   at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)"
}
[可查询]
公共IQueryable get()
{
返回_repositorio.Query();
}
{
“$id”:“1”,
“消息”:“发生错误。”,
“ExceptionMessage”:“已添加具有相同密钥的项。”,
“ExceptionType”:“System.ArgumentException”,
“StackTrace”:“在System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)\r\n在System.Collections.Generic.Dictionary`2.Insert(TKey-key,TValue-value,Boolean-add)\r\n在System.Web.Http.OData.Builder.EdmTypeBuilder.d\u 0.MoveNext()\r\n在System.Linq.Enumerable.d\u aa`1.MoveNext()\r\n在System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source,Func`2 keySelector,Func`2 elementSelector,IEqualityComparer`1 comparer)\r\n位于System.Web.Http.OData.Builder.EdmModelHelperMethods.BuildEdmModel(String containerName,String containerName,IEnumerable`1 entityTypeConfigurations,IEnumerable`1 entitySetConfigurations)\r\n位于System.Web.Http.OData.Builder.ODataModelBuilder.GetEdmModel()\r\n位于System.Web.Http.OData.Builder.ODataConventionModelBuilder.GetEdmModel()\r\n位于System.Web.Http.HttpActionDescriptorExtensions.c\u显示类别1.b\u 0(对象\r\n位于System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey,Func`2 valueFactory)\r\n位于System.Web.Http.HttpActionDescriptor.GetedModel(HttpActionDescriptor actionDescriptor,类型entityClrType)\r\n位于System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n位于System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext,HttpResponseMessage response,Exception Exception)\r\n位于System.Web.Http.Filters.ActionFilterAttribute.c_uuDisplayClass2.b_u0(HttpResponseMessage response)\r\n位于System.Threading.Tasks.TaskHelperExtensions.c_uDisplayClass41`2.b_u40(Task`1 t)\r\n位于System.Threading.TaskHelperExtensions.TheImpl[TTask,TOuterResult](TTask任务,函数'2 continuation,CancellationToken CancellationToken,布尔运行同步)
}
这个答案是对聊天内容的总结。所以它读起来与标准答案不同


我还没有收到这个错误,但是看起来OData在查找“id”属性时遇到了问题。一旦OData被拉到一个独立的包中,就发生了一些更改

版本?
我要检查的第一件事是您是否有独立的oData软件包(
Microsoft.Data.oData 5.0.1
Microsoft.AspNet.WebApi.oData 0.1.0-alpha-120815
)。您可以通过在软件包管理控制台中键入
Get package
来完成此操作

在聊天室中,您发布了以下内容:

Microsoft.AspNet.WebApi.OData 0.1.0-alpha-120815
Microsoft.Data.Edm 5.1.0-rc2
Microsoft.Data.OData 5.1.0-rc2
Microsoft.Data.OData.Contrib 5.1.0.50918-rc
系统空间5.1.0-rc2

所以看起来您仍然在运行产品的RC。这里似乎描述了这种行为。缺陷的不足之处在于,具有继承属性的类会抛出错误

电流不起作用
更新到当前版本似乎并不能解决问题,所以下一步是尝试更新的签名夜生活

获取签名的夜间构建的说明

si
[DataServiceKey("Id")]
public class Pessoa : IEntity, IAuditable
{
    public int Id { get; set; }
    //...
}