当数据库架构发生变化时,我们如何避免破坏 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/