c# - 如何返回松散类型的对象?

标签 c# .net asp.net-web-api asp.net-web-api2 visual-studio-2017

当数据库架构发生变化时,我们如何避免破坏 Controller 方法的变化?

假设我要返回一个对象:

public class Bike
{
   public int Wheels {get;}
   public int Id {get;}
}

在以下 Controller 中:

public class BikeController
{
    [HttpGet]
    public List<Bike> Get([FromBody] MyRequest request)
    {
        var context = new DbContext(_repository.Database.Connection.ConnectionString);
        var procedure = request;
        return context.Database.ExecuteStoredProcedure<Bike>(procedure).ToList();
    }
}

在某些时候,数据库代码发生了变化。 我不想在 C# 中重新定义 Bike 架构。

我们如何更改 Bike Controller 方法的签名,以便在数据库架构更改时不产生任何破坏性更改?

我正在寻找类似以下内容的内容:

public IHttpActionResult Get()
{
    var context = new DbContext(_repository.Database.Connection.ConnectionString);
    var procedure = request;
    return context.Database.ExecuteStoredProcedure<object>(procedure).ToList();
}

最佳答案

我不明白为什么您的 Controller 需要更改,因为您只是直接返回检索到的类型,而没有在您的操作方法中引用它的任何属性。

此外,为什么在返回单个 Bike 对象时调用 .ToList()。此外,您可以考虑使用 Model 或 ViewModel 而不是直接返回实体作为选项。

@Evk 已经指出,新添加的属性在反序列化时会丢失,但如果您想返回一个抽象对象,那么您可以让所有实体继承自具有共同属性的 BaseEntity 并返回而是喜欢

BaseEntity obj = context.Database.ExecuteStoredProcedure<Bike>(procedure);
returb obj;

关于c# - 如何返回松散类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47913678/

相关文章:

c# - 将 PowerBuilder 应用程序移植到 .NET

c# - 将参数从 .aspx.cs 传递到 .ashx

mysql - 如何使用 HTTP POST 为 SQL 数据库设置正确的主键?

c# - EF 核心 : Get Authenticated username in Shadow Properties

c# - Console.WriteLine 在 VS2012 中不再工作

c# - 无法使此 Func<T,T> 工作

c# - WebBrowserDocumentCompletedEventHandler 不要等待 Ajax 异步完成

c# - 如何验证玩家当前是否登录(或登录)到 iOS Game Center?

c# - 在浏览器中打开文件而不是下载文件

asp.net - 405 方法选项不允许在 asp.net web api Controller 中使用?