当前位置:  开发笔记 > 编程语言 > 正文

从类型中获取DbSet

如何解决《从类型中获取DbSet》经验,为你挑选了0个好方法。

我正在尝试为MVC 6应用程序创建通用表查看器/编辑器.

我目前正在使用

Context.GetEntityTypes();

给我一个表格列表.

现在我需要获取特定类型的数据.我目前的实施是:

// On my context
public IQueryable GetDbSetByType(string fullname)
{
    Type targetType = Type.GetType(fullname);

    var model = GetType()
        .GetRuntimeProperties()
        .Where(o =>
            o.PropertyType.IsGenericType &&
            o.PropertyType.GetGenericTypeDefinition() == typeof(DbSet<>) &&
            o.PropertyType.GenericTypeArguments.Contains(targetType))
        .FirstOrDefault();

    if (null != model)
    {
        return (IQueryable)model.GetValue(this);
    }

    return null;
}

在我的控制器中使用此代码

[HttpGet("{requestedContext}/{requestedTable}/data")]
public IActionResult GetTableData(string requestedContext, string requestedTable)
{
    var data = Request.Query;
    var context = GetContext(requestedContext);

    if (context == null)
    {
        return new ErrorObjectResult("Invalid context specified");
    }
    var entity = context.GetEntity(requestedTable);

    if (entity == null)
    {
        return new ErrorObjectResult("Invalid table specified");
    }

    var set = context.GetDbSetByType(entity.ClrType.AssemblyQualifiedName);

    if (set == null)
    {
        return new ErrorObjectResult("Invalid table specified - DbSet could not be found");
    }

    var start = Convert.ToInt32(data["start"].ToString());
    var count = Convert.ToInt32(data["length"].ToString());
    var search = data["search[value]"];

    return new ObjectResult(set.Skip(start).Take(count));
}

实际上,这将返回长度count和位置的数据start.但是我无法对该特定属性执行查询IQueryable.

问题是:

    这似乎是一件微不足道的事情,所以我几乎可以肯定我错过了一些东西 - 这一定很容易做到.

    如果不是1,那么我如何将我的object set回复转换为a,DbSet以便我可以执行查询?如果我设置断点并检查我可以看到我的所有数据都坐在那里.

注意:这是EF7

附加信息:

    requestedTable是完全合格的EG类型:.Models.Shared.Users

编辑(2016/5/5)

我最后只是用简单的SQL来做这件事 - 如果有人设法让这个工作,请告诉我!

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有