在EF的ApiController中返回一个未知对象?

时间:2017-11-15 18:44:44

标签: c# .net sql-server entity-framework visual-studio-2017

是否可以在不知道高级架构的情况下从数据库返回结果集?

我暴露了客户端通过API将参数传递给存储过程的能力:

    [Route("TheRequest")]
    public object Get([FromUri] TheRequest request)

然后返回:

_repository.Database.SqlQuery<object>(request.ToSqlString());   //execute sql against a stored procedure, passing in the required parameters to it

尝试这样做时,我认为控制器不知道如何序列化返回的对象。这是邮递员的回报:

enter image description here

是否可以在不知道对象架构的情况下从数据库返回Json序列化对象响应?

1 个答案:

答案 0 :(得分:1)

  

是否可以在不知道高级架构的情况下从数据库返回结果集?

关于只是EF ,答案是不是。 EF旨在让您事先了解架构。所以你仍然可以在ContextDb.Database之外使用DAO,但是你使用EF并没有多大意义。

现在问题是,我可以通常从EF 输入实例然后确定,没问题:

var result = DbContext.Set<T>().FirstOrDefault();

这段代码不知道它在编译时拉动了什么。

  

是否可以在不知道对象架构的情况下从数据库返回Json序列化对象响应?

Sorta ,正如我之前提到的,你不能像预期的那样使用EF,但你当然可以做类似的事情

public ActionResult Index(string type)
{
  var entityType = Type.GetType(type);
  // reflection
  var methods = typeof(ContextDb).GetMethods("Set");

  // Not tested, but something like the following
  // Find the Generic Version
  var method = methods.Where(m => m.IsGenericMethod).FirstOrDefault();
  // Make the method info for the typed method
  var methodInfo = method.MakeGenericMethod(entityType);
  // Invoke method, cast as needed, get value
  var result = (methodInfo.Invoke(ContextDb) as DbSet).FirstOrDefault();

  return Json(result);
}