我正在使用 .Net Core 6 和 Visual Studio 2022 社区版
VS 为 WebApi 提供了这些脚手架项目选项
所选选项会为
int id, string value
生成 CRUD 骨架,但是 如果我已经有一个模型并且想要使用该模型构建相同的 CRUD 方法,我该怎么做?
您可以假设我的模型具有此符号,以允许向导在选择自定义模型后使用它
class Person {
[Key]
string id ;
}
namespace webapi_6
{
[Route("api/[controller]")]
[ApiController]
public class EmployeeController : ControllerBase
{
// GET: api/<EmployeeController>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<EmployeeController>/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/<EmployeeController>
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/<EmployeeController>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<EmployeeController>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}
我知道我可以获取生成的代码并将其更改为我的模型的类型,但是如果我有几个模型,这可能会变得无聊并且容易出错。
我还认为 VS 应该提供这个选项,因为 scoffolding 不应该仅限于实体框架。
PD:也欢迎命令行解决方案
问题归结为,Visual Studio 无法假设您的模型是什么样子,以及您想要如何查找项目。例如,您的索引属性是什么属性?它可以代表您做出假设,但很可能是错误的。实体框架将所有这些信息存储在其元数据中,因此很容易识别这些信息并知道如何查询所述数据。
您还可以做什么。是制作一个通用 CRUD API 控制器,将您的模型粘附到一个接口,然后使用所述接口创建一个新模型。
示例:
namespace webapi_6
{
public class GenericController<T> : ControllerBase where T : IMyModel
{
protected IStorageAccess<T> storage;
protected GenericController(IStorageAccess<T> myStorage)
{
//Inject some sort of Storage here
storage = myStorage;
}
[HttpGet]
public virtual IEnumerable<T> Get()
{
return myStorage.Get();
}
[HttpGet("{id}")]
public virtual string Get(int id)
{
return myStorage.Get(id);
}
[HttpPost]
public virtual void Post([FromBody] T value)
{
}
[HttpPut("{id}")]
public virtual void Put(int id, [FromBody] T value)
{
}
[HttpDelete("{id}")]
public virtual void Delete(int id)
{
}
}
}
然后您可以像这样为每个模型实现泛型,并根据需要重写方法。
namespace webapi_6
{
[Route("api/[controller]")]
[ApiController]
public class EmployeeController : GenericController<Employee>
{
public EmployeeController(IStorageAccess<Employee> myStorage) : base(myStorage)
}
}
或者可能有第 3 方插件,我还没有遇到过,但制作一个能够完成此任务的 Visual Studio 插件并不是牵强的。您甚至可以从 T4 模板开始。 https://learn.microsoft.com/en-us/visualstudio/modeling/code- Generation-and-t4-text-templates
在最新版本的 Visual Studio 2022 中,可以根据定义的模型构建 Web API 端点并创建 MSSQL 本地数据库,而无需手动创建迁移并键入用于添加和更新数据库的命令。
使用最新的.NET版本和默认设置创建API项目。然后,创建一个仅包含一个实体的 Models 文件夹。
当模型创建成功后,脚手架技术可以创建CRUD操作。
在搭建脚手架的过程中,需要将所需的NuGet添加到解决方案中,脚手架完成后,会出现YourEntityEndpoints.cs,其中包含API调用,并且在Data文件夹中会存在FastMinimalAPIContext.cs。另外,在Program.cs中,实体框架配置将自动添加。
创建模型/类:
首先,创建一个类或模型来表示您想要通过 Web API 公开的数据。此类不需要是实体框架实体。 添加控制器:
右键单击项目中的 Controllers 文件夹。 选择“添加”->“控制器...”。 在“添加支架”对话框中,选择左侧的“API”。 选择“带有操作的 API 控制器,使用实体框架”(即使您没有使用实体框架)。 配置脚手架:
在“模型类”下拉列表中,选择您的自定义模型或类(例如 YourModel)。 在“数据上下文类”下拉列表中,将其保留为“使用单独的数据上下文类”(因为您没有使用实体框架)。 单击“添加”。 查看并修改生成的代码:
Visual Studio 将在 Controllers 文件夹中生成一个具有基本 CRUD 操作的控制器。 打开生成的控制器文件(例如 YourModelsController.cs)并查看代码。 注意:如果您不使用实体框架进行数据访问,则可能需要调整代码。默认脚手架采用实体框架,因此您可能需要用自己的逻辑替换数据访问代码。
自定义控制器操作:
根据您的数据访问需求自定义控制器操作。您可以用自己的逻辑替换默认的基于实体框架的代码,以与数据源交互。