C# 如何使用EntityFramework动态指定要检索数据的实体?

C# 如何使用EntityFramework动态指定要检索数据的实体?,c#,entity-framework,linq,dynamic,entity-framework-6,C#,Entity Framework,Linq,Dynamic,Entity Framework 6,我有一个实体查找列表,称为标准。例如国家、产品类型、进口港、害虫等。。。这些实体的目的是供第三方提供商使用,目标是创建一个要使用的Web API端点,其中提供商将指定他们所需的标准,响应将是JSON列表 对于后端,我使用EntityFramework 6,这是我在尝试获取数据时遇到的一点困难,执行起来需要很长时间 public Response<IEnumerable<dynamic>> GetStandardsByName(string name) {

我有一个实体查找列表,称为标准。例如国家、产品类型、进口港、害虫等。。。这些实体的目的是供第三方提供商使用,目标是创建一个要使用的Web API端点,其中提供商将指定他们所需的标准,响应将是JSON列表

对于后端,我使用EntityFramework 6,这是我在尝试获取数据时遇到的一点困难,执行起来需要很长时间

public Response<IEnumerable<dynamic>> GetStandardsByName(string name)
{
            Type standardType = typeof(eCertModel).Assembly.DefinedTypes.SingleOrDefault(p=> p.Name == name);

            if (standardType == null)
            {
                return new Response<IEnumerable<object>>
                {
                    IsSuccessful = false,
                    Message = "Not a valid standard",
                    Data = null
                };
            }

            **dynamic standardData = _db.Set(standardType).ToListAsync().Result;**

            return new Response<IEnumerable<dynamic>>
            {
                Data = standardData,
                IsSuccessful = true,
                Message = $"Standard '{name}' returned successfully!"
            };
        }
公共响应GetStandardsByName(字符串名称)
{
类型standardType=typeof(eCertModel).Assembly.DefinedTypes.SingleOrDefault(p=>p.Name==Name);
如果(standardType==null)
{
返回新的响应
{
IsSuccessful=false,
Message=“不是有效的标准”,
数据=空
};
}
**动态标准数据=_db.Set(standardType).toListSync().Result**
返回新的响应
{
数据=标准数据,
IsSuccessful=true,
Message=$“标准{name}已成功返回!”
};
}

有更好的办法吗?我不想有不同端点的原因是,我必须满足所有52个标准,这很难维持。而且它似乎可能是调用ToListSync,这是唯一可用的。是的,我开始使用async await,但这更麻烦,从控制器到这种方法,整个应用程序都冻结了…

没有必要乱动。只需将控制器的返回类型更改为并序列化响应数据,然后自己将其发送到客户端。通过使用一个返回多种不同形状数据的控制器,您可以选择不使用有用的消息格式,因此没有理由不直接指定HTTP响应消息


当然,“我不想有不同的端点的原因,那就是我必须满足所有52个标准,这很难维持”并不是一个很好的理由。您可以轻松地自动生成控制器。

使用模式获得Xml响应可能是更好的方法。但是,如果要映射到类,那么仍然需要维护52个标准。(模式)。你好,大卫,谢谢你的回复,不过,我也在尝试让它在业务层工作,这样我就不必调用每个数据库集。我的API已经有一个返回类型IHttpActionResult。我要找的是如何调用EF,而不调用每个EntitySet。然后我不确定问题出在哪里。您拥有的代码应该用于获取该类型的所有实体。