EF在特定地图中包含导航属性

时间:2018-11-27 20:03:54

标签: c# entity-framework linq

我在EF NET Core上有这两个类,它们分别表示数据库对象:

public partial class Clientes
{
    public int IdCliente { get; set; }
    public TiposIva CondicionIva { get; set; }
}

public partial class TiposIva
{
    public int IdCondicionIva { get; set; }
    public string Descripcion { get; set; }
    public string Letra { get; set; }
    public string Fiscal { get; set; }

    public Enumerador ToEnumerador() {
        return new Enumerador { ID = this.IdCondicionIva, Valor = this.Descripcion };
    }
}

现在,我正在尝试编写一个查询,该查询返回一个Clientes对象,并包括TiposIva属性(导航),但不是全部,仅包含ToEnumerador方法上表示的那些。

实际上,我需要一个带有Enumerador属性的Clientes对象,其中填充了相关的TiposIva数据

我尝试:

return this.RepositoryContext.Clientes
            .Include(c => c.CondicionIva.ToEnumerador())
            .FirstOrDefault();

但是我得到这个错误:

  

System.InvalidOperationException     HResult = 0x80131509     Mensaje =包含属性lambda表达式'c => c.CondicionIva.ToEnumerador()'无效。该表达式应表示属性访问:“ t => t.MyProperty”。要定位在派生类型上声明的导航,请指定目标类型的显式键入的lambda参数,例如'(派生d)=> d.MyProperty'。有关包含相关数据的更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=746393。     Origen = Microsoft.EntityFrameworkCore     Seguimiento de la pila:      在Microsoft.EntityFrameworkCore.Query.ResultOperators.Internal.IncludeExpressionNode.CreateResultOperator(ClauseGenerationContext子句GenerationContext)      在Remotion.Linq.Parsing.Structure.IntermediateModel.ResultOperatorExpressionNodeBase.ApplyNodeSpecificSemantics(QueryModel queryModel,ClauseGenerationContext子句GenerationContext)      在Remotion.Linq.Parsing.Structure.IntermediateModel.MethodCallExpressionNodeBase.Apply(QueryModel queryModel,ClauseGenerationContext子句GenerationContext)      在Remotion.Linq.Parsing.Structure.QueryParser.ApplyAllNodes(IExpressionNode节点,ClauseGenerationContext子句GenerationContext)      在Remotion.Linq.Parsing.Structure.QueryParser.ApplyAllNodes(IExpressionNode节点,ClauseGenerationContext子句GenerationContext)      在Remotion.Linq.Parsing.Structure.QueryParser.GetParsedQuery(Expression expressionTreeRoot)      在Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore [TResult](表达式查询,IQueryModelGenerator queryModelGenerator,IDatabase数据库,IDiagnosticsLogger 1 logger, Type contextType) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass13_0 1.b__0()      在Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore [TFunc](对象cacheKey,Func 1 compiler) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable 1源)处      在OhmioRepositorios.ClientesRepository.Cargar(Int32 IdCliente)中的C:\ Users \ Eric \ Documents \ Fuentes Ohmio WEB \ Server EF \ OhmioRepositorios \ ClientesRepository.cs:第40行      在OhmioServicios.Servicios.Clientes_svc.Cargar(Int32 id)中的C:\ Users \ Eric \ Documents \ Fuentes Ohmio WEB \ Server EF \ OhmioServicios \ Servicios \ Clientes_svc.cs:line 50      在OhmioWEBAPINetCore.Controllers.ClientesController.GetCliente(Int32 idCliente)中的C:\ Users \ Eric \ Documents \ Fuentes Ohmio WEB \ Server EF \ OhmioWEBAPINetCore \ Controllers \ ClientesController.cs:line 38      在Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target,Object []参数)      在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext()

1 个答案:

答案 0 :(得分:0)

那样无法正常工作。 “包含”您只能使用导航属性。 您无需在“包含”内调用.ToEnumerador()方法,只需使用TiposIva。