EF核心查询不考虑OData查询

时间:2019-07-18 13:30:34

标签: c# asp.net-core entity-framework-core odata

我正在我的 ASP.Net Core 网站中使用NuGet Microsoft.AspNetCore.OData 创建一个OData端点。

我的想法是不公开我的数据库模型并使用 LINQ Select 函数映射它们,以更好地控制哪些属性可以显示在外部,例如谁创建了什么。

将来,由于对数据授予的权限,将向 IEnumerable 中添加更多逻辑。

一切正常。我可以在 ODataController 上获取,过滤和扩展数据。除了一件事,我注意到使用 Entity Framework Core 的调试选项;我发送给 ODataController 的所有内容都是在内存中完成的,而不是通过我期望的通过 Entity Framework 的表达式完成的。每次都要求一切。当然,随着增长,随着时间的流逝,这将成为越来越多的问题。

一些类似于我正在做的代码

   public class ExampleModel {
            public Guid Id { get; set; }
            public string Name { get; set; }
        }

    public class ExampleDbModel{
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

    public class ExampleRepository {
        public IEnumerable<ContentItem> Get(string userId)
        {
            return this._dbContext.Example
                .Select(ExampleMapper.Map) // Mapper is pure property to property in this example, same names
                .Where(e => e.UserID == userId); // Permissions will be more complex
        }
    }

    public class ExampleController : ODataController
    {
        // Constructor, properties, DI, ...
        [EnableQuery]
        public IActionResult Get()
        {
            return Ok(_exampleRepository.Get(SomeStaticVariableForUserId));
        }
    }

调用控制器时,我总是注意到Entity Framework Core正在执行以下查询

    SELECT [ExampleDbModel].[Id], [ExampleDbModel].[Name]
        FROM ExampleDbModel

即使我正在执行 localhost:5050 / odata / examplemodel?$ select = id ,它仍会执行相同的查询加载所有内容

我想知道如何将OData查询直接转换为 Entity Framework Core ,以尽可能少地加载。

0 个答案:

没有答案
相关问题