如何从数据库中提供数据是否可信?

时间:2017-11-01 14:50:02

标签: c# asp.net-core asp.net-core-mvc visual-studio-2017

我们可以创建一个记录数组,并允许它成为Queryable:

        var entities = new[] {
            new Product{ Id = 1,Category  = "Test 1" },
            new Product{ Id = 2, Category = "Test 2" },
            new Product{ Id = 3, Category = "Another texts" },
        }.AsQueryable();

如果不是在内存中查询,我们如何获得相同的功能,我们直接进入数据库?

具体用例是通过odata公开数据:

    public IQueryable<Product> Get()
    {
        // plug your entities source (database or whatever)
        var entities = (mydatabaseentity????).AsQueryable();  

        var modelManager = (IODataModelManger)HttpContext.RequestServices.GetService(typeof(IODataModelManger));
        var model = modelManager.GetModel(nameof(Web1));
        var queryContext = new ODataQueryContext(model, typeof(Product), null);
        var queryOptions = new ODataQueryOptions(queryContext, HttpContext.Request);

        return queryOptions
            .ApplyTo(entities, new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.True
            })
            .Cast<Product>();
    }

我们如何从数据库中公开数据,以使其可以像上面的产品实体那样进行查询,然后允许它可以进行odata查询?

1 个答案:

答案 0 :(得分:1)

您最好的选择是使用像实体框架这样的ORM。

假设您定义了一个映射到数据库的Context。

public class ProductContext : DbContext
{
    public DbSet<Product> Products {get; set;}
}

然后像var products = _context.Products;这样的简单查询实际上会为您返回IQueryable。为您的项目设置实体框架的细节将取决于您的数据库以及Product类的外观,但关键是DbSet本身是IQueryable。同样,您可以通过执行_context.Products.Where(p => p.Name == "SOMEVALUE");之类的操作为查询添加约束。使用Entity Framework,您无需添加.AsQueryable()。返回的值已经是IQueryable

以下文档应该有所帮助:

https://docs.microsoft.com/en-us/ef/core/

https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db