NHibernate.QueryException:无法使用WebApi解析属性+;奥达

NHibernate.QueryException:无法使用WebApi解析属性+;奥达,nhibernate,asp.net-mvc-4,fluent-nhibernate,asp.net-web-api,odata,Nhibernate,Asp.net Mvc 4,Fluent Nhibernate,Asp.net Web Api,Odata,当我在我的Url上使用一个过滤器作为GET/api/modalidades?$orderby=Nome&$select=Nome时,会显示一个错误 包装: FluentNHibernate 1.3.0.733 NHibernate 3.3.3.4000 Microsoft.AspNet.WebApi 5.0.0-rtm-130624 Microsoft.AspNet.WebApi.Client 5.0.0-rtm-130624 Microsoft.AspNet.WebApi.Core 5.0.0

当我在我的Url上使用一个过滤器作为GET
/api/modalidades?$orderby=Nome&$select=Nome时,会显示一个错误

包装: FluentNHibernate 1.3.0.733
NHibernate 3.3.3.4000
Microsoft.AspNet.WebApi 5.0.0-rtm-130624
Microsoft.AspNet.WebApi.Client 5.0.0-rtm-130624
Microsoft.AspNet.WebApi.Core 5.0.0-rtm-130624
Microsoft.AspNet.WebApi.OData 5.0.0-rtm-130624
Microsoft.AspNet.WebApi.Web。。。5.0.0-rtm-130624

代码 领域
公共类Modalidade:EntityNome
{ }
公共抽象类EntityName:EntityName
{
公共虚拟整数Id{get;受保护的内部集合;}
[条次建议修正案(80)]
[必需]
公共虚拟字符串Nome{get;set;}
}
公共界面友好性:IKeyed
{
}
公共接口,其中T:struct
{
T Id{get;}
}
网状物 WebApiConfig.css

public static void Register(HttpConfiguration config)
{
    var modelBuilder = new ODataConventionModelBuilder();

    modelBuilder.EntitySet<Modalidade>("modalidades");
    modelBuilder.Entity<Modalidade>()
        .DerivesFrom<EntityNome>()
        .Property(p => p.Id);

    var model = modelBuilder.GetEdmModel();

    config.Routes.MapODataRoute(routeName: "OData", routePrefix: "api", model: model);

    config.EnableQuerySupport();

    var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
    var enumConverter = new StringEnumConverter();
    jsonFormatter.SerializerSettings.Converters.Add(enumConverter);

    config.Formatters.Remove(config.Formatters.XmlFormatter);
    var jqueryFormatter = config.Formatters.FirstOrDefault(x => x.GetType() == typeof(JQueryMvcFormUrlEncodedFormatter));
    config.Formatters.Remove(config.Formatters.XmlFormatter);
    config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
    config.Formatters.Remove(jqueryFormatter);
    config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
}
public class baseApiController<T> : EntitySetController<T, int>
    where T : class, IEntity
{
    public IRepository<T> Repositorio { get; private set; }

    public baseApiController(IRepository<T> repositorio)
    {
        Repositorio = repositorio;
    }

    [Queryable(AllowedQueryOptions = AllowedQueryOptions.All, PageSize = 20)]
    public override IQueryable<T> Get()
    {
        return Repositorio.All();
    }

    [HttpGet, Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
    protected override T GetEntityByKey(int key)
    {
        return Repositorio.Get(key);
    }
}

[Authorize]
public class modalidadesController : baseApiController<Modalidade>
{
    public modalidadesController(IModalidadeRepository repositorio)
        : base(repositorio)
    { }
}
公共静态无效寄存器(HttpConfiguration配置)
{
var modelBuilder=新ODataConventionModelBuilder();
modelBuilder.EntitySet(“modalidades”);
modelBuilder.Entity()
.DerivesFrom()
.属性(p=>p.Id);
var model=modelBuilder.GetEdmModel();
config.Routes.MapODataRoute(routeName:“OData”,routePrefix:“api”,model:model);
config.EnableQuerySupport();
var jsonFormatter=GlobalConfiguration.Configuration.Formatters.jsonFormatter;
var enumConverter=新的StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);
config.Formatters.Remove(config.Formatters.XmlFormatter);
var jqueryFormatter=config.Formatters.FirstOrDefault(x=>x.GetType()==typeof(JQueryMvcFormUrlEncodedFormatter));
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
config.Formatters.Remove(jqueryFormatter);
config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling=DateFormatHandling.IsoDateFormat;
}
控制器

public static void Register(HttpConfiguration config)
{
    var modelBuilder = new ODataConventionModelBuilder();

    modelBuilder.EntitySet<Modalidade>("modalidades");
    modelBuilder.Entity<Modalidade>()
        .DerivesFrom<EntityNome>()
        .Property(p => p.Id);

    var model = modelBuilder.GetEdmModel();

    config.Routes.MapODataRoute(routeName: "OData", routePrefix: "api", model: model);

    config.EnableQuerySupport();

    var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
    var enumConverter = new StringEnumConverter();
    jsonFormatter.SerializerSettings.Converters.Add(enumConverter);

    config.Formatters.Remove(config.Formatters.XmlFormatter);
    var jqueryFormatter = config.Formatters.FirstOrDefault(x => x.GetType() == typeof(JQueryMvcFormUrlEncodedFormatter));
    config.Formatters.Remove(config.Formatters.XmlFormatter);
    config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
    config.Formatters.Remove(jqueryFormatter);
    config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
}
public class baseApiController<T> : EntitySetController<T, int>
    where T : class, IEntity
{
    public IRepository<T> Repositorio { get; private set; }

    public baseApiController(IRepository<T> repositorio)
    {
        Repositorio = repositorio;
    }

    [Queryable(AllowedQueryOptions = AllowedQueryOptions.All, PageSize = 20)]
    public override IQueryable<T> Get()
    {
        return Repositorio.All();
    }

    [HttpGet, Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
    protected override T GetEntityByKey(int key)
    {
        return Repositorio.Get(key);
    }
}

[Authorize]
public class modalidadesController : baseApiController<Modalidade>
{
    public modalidadesController(IModalidadeRepository repositorio)
        : base(repositorio)
    { }
}
公共类baseApiController:EntitySetController
式中T:类,属性
{
公共iRepositorio{get;私有集;}
公共基站控制器(iRepositorio)
{
Repositorio=Repositorio;
}
[可查询(AllowedQueryOptions=AllowedQueryOptions.All,PageSize=20)]
公共覆盖IQueryable Get()
{
返回Repositorio.All();
}
[HttpGet,可查询(AllowedQueryOptions=AllowedQueryOptions.All)]
受保护的覆盖T GetEntityByKey(int键)
{
返回Repositorio.Get(键);
}
}
[授权]
公共类modalidadesController:baseApiController
{
公共移动控制器(IModalidaderepositorio)
:基本(重置)
{ }
}
错误 当没有应用过滤器时,一切正常。但当应用过滤器时,会产生错误

GET/api/modalidades?$orderby=Nome&$select=Nome,Id HTTP/1.1
主机:本地主机:49971
缓存控制:没有缓存

{
“odata.error”:{
“代码”:“,
“信息”:{
“郎”:“恩我们”,
“值”:“发生错误。”
},
“内部错误”:{
“消息”:“调用的目标已引发异常。”,
“类型”:“系统.反射.目标异常”,
“stacktrace”:“在System.Web.Http.ApiController.d_u0.MoveNext()\r\n--从引发异常的上一个位置开始的堆栈结束跟踪----\r\n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务任务)\r\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务任务任务任务任务任务)\r\n位于System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u0.MoveNext()“,
“内部例外”:{
“消息”:“无法解析属性:类别:CreditoImobiliarioBB.Model.Modalidade[.Take[System.Web.Http.OData.Query.Expressions.SelectExpandWrapper`1[[CreditoImobiliarioBB.Model.Modalidade,CreditoImobiliarioBB.Model,Version=1.0.0,Culture=neral,PublicKeyToken=null]](.Select[CreditoImobiliarioBB.Model.Modalidade,System.Web.Http.OData.Query.Expressions.SelectExpandWrapper`1[[CreditoImobiliarioBB.Model.Modalidade,CreditoImobiliarioBB.Model.Modalidade,CreditoImobiliarioBB.Model.Modalidade,CreditoImobiliarioBB.Model.Model,Model,Version=1.0.0.0,Culture=中立,publickeytokeToken=null]](.ThenBy[creditoimobiliariaiobb.Model.Model.Int32]OrderBy(NHibernate.Linq.NhQueryable`1[CreditoImobiliarioBB.Model.Modalidade],Quote($it,)=>($it.Nome)),,Quote($it,)=>($it.Id)),Quote(,)=>(新选择ExpandWrapper`1()444fb09a-b4c8-43e1-b1f6-D469F9DA76E新名称属性,下一个`1()IdEqual(,NULL)?NULL:Convert(.Id)新名称属性`1 IsType(,creditoimobiliariotybb.Model.Nome)?Nome:NULLEqual(,NULL)?NULL:IsType(,CreditoImobiliarioBB.Model.EntityNome)?TypeAs().Nome:NULL)),),p8,)]“,
“类型”:“NHibernate.QueryException”,
“stacktrace:”位于NHibernate.Persister.Entity.AbstractPropertyMapping.ToType(String propertyName)\r\n位于NHibernate.Persister.Entity.AbstractEntityMaster.ToType(String propertyName)\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.FromElementType.GetPropertyType(String propertyName,String propertyPath)\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.FromElement.GetPropertyType(String propertyName,String propertyPath)\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.DotNode.GetDataType()\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.DotNode.PrepareLhs()\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.DotNode.Resolve(Boolean generateJoin,Boolean implicitJoin,String classAlias,IASTNode parent)\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.FromReferenceNode.Resolve(Boolean generateJoin,Boolean implicitJoin,String classAlias)\r\n位于NHibernate.Hql.Ast.ANTLR.Tree.FromReferenceNode.Resolve(Boolean generateJoin,Boolean implicitJoin,String classAlias)
[Queryable(EnsureStableOrdering = false, AllowedQueryOptions = AllowedQueryOptions.All, PageSize = 20)]
public override IQueryable<T> Get()