c# - 使用 Lamar 搭建实体框架控制器
问题描述
我在 .NET Core 2 项目中设置了 Lamar:
public class Program
{
public static void Main(string[] args)
{
IWebHost webhost = CreateWebHostBuilder(args).Build();
//((Container)webhost.Services).GetInstance<IStart>().Run();
webhost.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseLamar()
.UseStartup<Startup>();
}
...
public class Startup
{
...
public void ConfigureContainer(ServiceRegistry services)
{
services.Configure<Configuration.Auth>("auth", Configuration);
...
services.Scan(s =>
{
s.TheCallingAssembly();
s.WithDefaultConventions();
});
services.AddCors();
services.AddMvc()
.AddJsonOptions(o =>
{
o.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
o.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<Context>(options => options.UseSqlServer(Configuration.GetConnectionString("defaultConnection")));
}
}
但是,当尝试将 Scaffold API Controller 与操作一起使用时,使用 Entity Framework我遇到以下错误:
运行所选代码生成器时出错:“没有为此对象定义无参数构造函数。”
查找此https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/?view=aspnetcore-2.2#update-main-method-in-programcs建议这可以显示在尝试仍使用 .NET 1.x 结构的 ASP.NET Core 2 项目中。
我发现了一个 hacky 解决方法,我将在下面发布,这表明脚手架代码生成可能与 Lamar 有问题。但是,有没有更好的解决方案?你能设置 Lamar 来处理实体框架代码生成吗?
解决方案
考虑到 EF 在生成代码部分失败,我想知道问题是否可能不是无参数构造函数(我很确定它所指的任何未命名对象实际上都有一个),而是使用时如何构建 WebHost 的问题拉马尔。
Lamar 文档中关于与 ASP.NET Core 集成的说明
笔记!从 ASP.Net Core 2.1 开始,该
Startup.ConfigureServices(ServiceRegistry)
约定不起作用。改为使用ConfigureContainer(ServiceRegistry)
。
我在 Startup 中使用了 Lamar 函数;但是,如果我将其改回ConfigureContainer(IServiceCollection services)
(并注释掉特定于 Lamar 的函数,例如 Scan),我发现我能够再次构建 EF 控制器。
因此,目前,我的解决方法是在搭建脚手架之前将 Lamar 注释掉,然后在完成后将其取消注释。我怀疑可能有更好的解决方案......
推荐阅读
- xml - Powershell 从 xml 节点中删除前缀
- java - 在Java中使用runnable启动线程客户端套接字的正确方法是什么?
- spring-boot - Java swagger-ui 不呈现参数的允许值
- python - 将 AWS Lamda + API 迁移到 FastAPI + Mangum
- javascript - 每当鼠标悬停时使用 addEventListener 更改 html 列表中的颜色
- javascript - Discord.js 向另一个频道发送消息
- javascript - 移除事件监听器,箭头函数
- rust - 生成返回字符串的函数时,为什么 wasm-opt 在 wasm-pack 构建中失败?
- sql - Cakephp 3用where子句加入satetment
- javascript - 使用空闲计时器重定向页面