如何使用 EntityFramework 动态指定实体检索数据?
How to dynamically specify entity to retrieve data using EntityFramework?
我有一个称为标准的实体查找列表。例如。国家、ProductTypes、PortofEntry、Pests 等...这些实体的目的是供第三方供应商使用,目标是创建一个 Web API 端点供供应商使用,其中供应商将指定他们的标准require 并且响应将是一个 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!"
};
}
有没有更好的方法可以做到这一点?我不想有不同端点的原因是,我必须满足所有 52 个标准,维护起来很麻烦。似乎它可能是对 ToListAsync 的调用,这是唯一可用的。是的,我开始使用 async-await 但这更麻烦,从控制器到这个方法,整个应用程序都冻结了...
没必要乱用 Dynamic。只需将控制器的 return 类型更改为 HttpResponseMessage 并将响应数据序列化并自己将其发送给客户端即可。您通过拥有一个包含许多不同形状数据的控制器来选择退出有用的消息格式,因此没有理由不直接指定 HTTP 响应消息。
当然 "The reason why I do not want to have different endpoints, that would me I have to cater for all 52 standards, which is messy to maintain" 并不是一个很好的理由。您可以轻松地自动生成控制器。
我有一个称为标准的实体查找列表。例如。国家、ProductTypes、PortofEntry、Pests 等...这些实体的目的是供第三方供应商使用,目标是创建一个 Web API 端点供供应商使用,其中供应商将指定他们的标准require 并且响应将是一个 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!"
};
}
有没有更好的方法可以做到这一点?我不想有不同端点的原因是,我必须满足所有 52 个标准,维护起来很麻烦。似乎它可能是对 ToListAsync 的调用,这是唯一可用的。是的,我开始使用 async-await 但这更麻烦,从控制器到这个方法,整个应用程序都冻结了...
没必要乱用 Dynamic。只需将控制器的 return 类型更改为 HttpResponseMessage 并将响应数据序列化并自己将其发送给客户端即可。您通过拥有一个包含许多不同形状数据的控制器来选择退出有用的消息格式,因此没有理由不直接指定 HTTP 响应消息。
当然 "The reason why I do not want to have different endpoints, that would me I have to cater for all 52 standards, which is messy to maintain" 并不是一个很好的理由。您可以轻松地自动生成控制器。