修改DBML文件添加列后遇dbQLBansachDataContext无参构造函数错误
修复'dbQLBansachDataContext'无参构造函数缺失的错误
这个错误是因为修改DBML重新生成实体后,自动生成的DataContext类没有保留无参构造函数,导致控制器里用无参方式实例化时失败。以下是几种修复方法:
方法1:手动给DataContext加无参构造(临时方案,更新DBML会被覆盖)
- 找到DBML对应的设计器文件(比如
dbQLBansach.designer.cs),定位到dbQLBansachDataContext类 - 添加无参构造函数,调用带连接字符串名称的基类构造:
注意:这里的连接字符串名称要和你public dbQLBansachDataContext() : base("name=dbQLBansachDataContext") { }appsettings.json里配置的一致。
方法2:用部分类添加无参构造(推荐,不会被自动生成覆盖)
- 新建一个独立的.cs文件(比如
dbQLBansachDataContextPartial.cs) - 写入部分类代码,添加无参构造:
这种方式下,后续更新DBML重新生成实体时,这个构造函数不会被覆盖。public partial class dbQLBansachDataContext { public dbQLBansachDataContext() : base("name=dbQLBansachDataContext") { } }
方法3:控制器里传参实例化/用依赖注入(更符合.NET Core规范)
手动传参实例化
在控制器里创建DataContext时,手动传入DbContextOptions:
var options = new DbContextOptionsBuilder<dbQLBansachDataContext>() .UseSqlServer(Configuration.GetConnectionString("YourConnectionStringName")) .Options; var dbContext = new dbQLBansachDataContext(options);
依赖注入(推荐)
- 在
Program.cs里注册DataContext服务:
builder.Services.AddDbContext<dbQLBansachDataContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("YourConnectionStringName")));
- 在控制器构造函数中注入DataContext:
private readonly dbQLBansachDataContext _dbContext; public YourController(dbQLBansachDataContext dbContext) { _dbContext = dbContext; }
之后直接用_dbContext操作数据即可,不需要手动实例化。
内容的提问来源于stack exchange,提问作者Hoàng
相关产品推荐
相关产品推荐

