无法创建“MyDBContext”类型的对象。对于设计时支持的不同模式

问题描述 投票:0回答:3

我正在 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();
c# sql-server entity-framework asp.net-core onion-architecture
3个回答
1
投票

尝试添加

    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; }

}

0
投票

终于,在尝试了所有的解决方案后,我暂时可以解决问题,但我不确定这种方法是否正确。 添加不带参数的构造函数后,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")));
祝你亲爱的好运


0
投票
尝试删除数据库中的迁移表

© www.soinside.com 2019 - 2024. All rights reserved.