【发布时间】:2018-01-13 18:44:51
【问题描述】:
我为 ASP Core 中的初始数据库创建了这个。我用这个:
dotnet ef migrations add InitialCreate
但它告诉我这个错误:
在“ApplicationDbContext”上找不到无参数构造函数。将无参数构造函数添加到“ApplicationDbContext”或在与“ApplicationDbContext”相同的程序集中添加“IDbContextFactory”的实现。
但我创建了一个 Constructor 。有什么问题 ?我该如何解决这个问题?
ApplicationDBContext:
public class ApplicationDbContext : ApplicationDbContextBase
{
public ApplicationDbContext(
IOptionsSnapshot<SiteSettings> siteSettings
, IHttpContextAccessor httpContextAccessor
, IHostingEnvironment hostingEnvironment
, ILogger<ApplicationDbContextBase> logger)
: base(siteSettings, httpContextAccessor, hostingEnvironment, logger)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.AddCustomIdentityMappings(SiteSettings.Value);
builder.AddAuditableShadowProperties();
}
ApplicationDbContextBase:
public abstract class ApplicationDbContextBase :
IdentityDbContext<User, Role, int, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>,
IUnitOfWork
{
protected readonly IHostingEnvironment HostingEnvironment;
protected readonly IHttpContextAccessor HttpContextAccessor;
protected readonly ILogger<ApplicationDbContextBase> Logger;
protected readonly IOptionsSnapshot<SiteSettings> SiteSettings;
private string v;
public ApplicationDbContextBase(string v)
{
this.v = v;
}
protected ApplicationDbContextBase(
IOptionsSnapshot<SiteSettings> siteSettings,
IHttpContextAccessor httpContextAccessor,
IHostingEnvironment hostingEnvironment,
ILogger<ApplicationDbContextBase> logger)
{
SiteSettings = siteSettings;
SiteSettings.CheckArgumentIsNull(nameof(SiteSettings));
HttpContextAccessor = httpContextAccessor;
HttpContextAccessor.CheckArgumentIsNull(nameof(HttpContextAccessor));
HostingEnvironment = hostingEnvironment;
HostingEnvironment.CheckArgumentIsNull(nameof(HostingEnvironment));
Logger = logger;
Logger.CheckArgumentIsNull(nameof(Logger));
}
更新
我在 Github 上传我的项目。 GitHub
【问题讨论】:
-
你是如何使用这个 DbContext 类的?您是否收到运行时错误或编译时错误?你在使用任何 DI 容器吗?
-
如果您为 ApplicationDbContext 类添加自己的构造函数,则删除默认的无参数构造函数。您需要手动将其读取到您的代码中:只需添加 public ApplicationDbContext()
-
@Steve 我写了这个构造函数:
public ApplicationDbContext() : base("ApplicationDbContext") { }但它告诉我这个错误:Object reference not set to an instance of an object. -
@ChetanRanpariya 我更新问题
-
@Vanna 我更新问题
标签: c# asp.net-mvc asp.net-core asp.net-core-mvc asp.net-core-1.1