我正在 asp.net core 6 平台上做一个项目。添加迁移时出现错误。 我之前的版本(asp.net core 5)和MVC架构都没有这个问题,但是我决定用onion架构来做这个项目。 在 asp.net core 6 中没有 startup.cs 文件,它的所有设置都移到了 program.cs 文件中,所以我无法正确诊断问题。 我还尝试了互联网上所有建议的解决方案 我什至在数据库上下文文件中创建了一个没有参数的构造函数,但它再次给出了错误
** 另外,我打算在program.cs文件中使用Connection String,不在DBContext中的Configuration方法中使用**
谢谢
运行添加迁移后出错:
无法创建“AhanoDBContext”类型的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728
我的数据库上下文:
public class AhanoDBContext : IdentityDbContext<User, Role, string, UserClaim, UserRole, IdentityUserLogin<string>, RoleClaim, IdentityUserToken<string>>
{
public AhanoDBContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
//with this function init all mapping which available in this function(for Identity)
builder.AddCustomIdentityMappings();
//with this function init all mapping which available in this function(for Application->Ahano)
builder.AddCustomAhanoMappings();
//Take Now DateTime from Server and get value automatically
builder.Entity<Product>().Property(b => b.PublishDateTime).HasDefaultValueSql("CONVERT(datetime,GetDate())");
}
public virtual DbSet<Category> Categories { set; get; }
public virtual DbSet<Product> Products { set; get; }
public virtual DbSet<ProductCategory> ProductCategories { get; set; }
public virtual DbSet<ProductsImage> ProductsImages { get; set; }
public virtual DbSet<Newsletter> Newsletters { get; set; }
public virtual DbSet<ProductTag> ProductTags { get; set; }
public virtual DbSet<Tag> Tags { get; set; }
}
程序.cs:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<AhanoDBContext>(options =>
{
//The name of the connection string is taken from appsetting.json under ConnectionStrings
options.UseSqlServer(builder.Configuration.GetConnectionString("DatabaseDBConnString"));
});
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios,
see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
尝试添加
public AhanoDBContext()
{
}
在您的
MyDBContext
文件中。如下所示,它对我有用。
public class AhanoDBContext : IdentityDbContext<User, Role, string, UserClaim, UserRole, IdentityUserLogin<string>, RoleClaim, IdentityUserToken<string>>
{
public AhanoDBContext()
{
}
public AhanoDBContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
//with this function init all mapping which available in this function(for Identity)
builder.AddCustomIdentityMappings();
//with this function init all mapping which available in this function(for Application->Ahano)
builder.AddCustomAhanoMappings();
//Take Now DateTime from Server and get value automatically
builder.Entity<Product>().Property(b => b.PublishDateTime).HasDefaultValueSql("CONVERT(datetime,GetDate())");
}
public virtual DbSet<Category> Categories { set; get; }
public virtual DbSet<Product> Products { set; get; }
public virtual DbSet<ProductCategory> ProductCategories { get; set; }
public virtual DbSet<ProductsImage> ProductsImages { get; set; }
public virtual DbSet<Newsletter> Newsletters { get; set; }
public virtual DbSet<ProductTag> ProductTags { get; set; }
public virtual DbSet<Tag> Tags { get; set; }
}
终于,在尝试了所有的解决方案后,我暂时可以解决问题,但我不确定这种方法是否正确。 添加不带参数的构造函数后,AddDBContext 服务在 program.cs 文件中无法识别,我不得不重写 MyDBContext 中的 OnConfiguring 方法并写入连接字符串。 但是我认为因为我使用的是onion架构,所以从security或者其他方面来说这是不正确的,因为program.cs文件在一层,而我的context在另一层。 如果您有解决方案来解决 AddDBContext 未被识别的问题,我将很高兴,并告诉我我所做的是否会在未来给我的项目带来问题。
MyDBContext中的OnConfiguring方法:
protected override void OnConfiguring(DbContextOptionsBuilder
optionsBuilder)
{
optionsBuilder.UseSqlServer("Data Source=(local);Initial
Catalog=AhanoDB;Integrated Security=true");
}
文件中无法识别的方法Program.cs我一直面临覆盖服务的错误:
builder.Services.AddDbContext<AhanoDBContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString
("DatabaseDBConnString")));
祝你亲爱的好运