【发布时间】:2017-12-20 20:10:26
【问题描述】:
当数据库架构发生变化时,我们如何避免破坏控制器方法的变化?
假设我要返回一个对象:
public class Bike
{
public int Wheels {get;}
public int Id {get;}
}
在以下控制器中:
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 控制器方法的签名,以便在数据库架构更改时不发生任何重大更改?
我正在寻找类似以下的内容:
public IHttpActionResult Get()
{
var context = new DbContext(_repository.Database.Connection.ConnectionString);
var procedure = request;
return context.Database.ExecuteStoredProcedure<object>(procedure).ToList();
}
【问题讨论】:
-
您是否担心控制器方法会中断,或者您是否担心如果返回的对象发生更改,API 的客户端可能会中断?
-
@ScottHannen 感谢您的回复。我不清楚,我已经更新了问题。我担心开发人员必须更新模型以反映数据库模式的变化,我不想这样做而是返回一个弱类型的对象
-
取决于客户端如何使用您的 api。假设您将对象作为 json 返回 - 大多数客户不会关心其他字段,并且它不太可能破坏任何内容。如果您删除字段 - 这当然是重大变化。
-
@Evk 我根本不想返回 Bike,我想返回动态或对象或抽象的东西,这可能吗?>
-
我怀疑他正在调用 .ToList 因为他正在返回 List<...> 将您的返回类型更改为 IEnumerable<...> 那么您将不需要 .ToList。
标签: c# .net asp.net-web-api asp.net-web-api2 visual-studio-2017