Entity framework core 无法创建类型为';MyEFCoreDbContext';xaf Blazor EFCore

Entity framework core 无法创建类型为';MyEFCoreDbContext';xaf Blazor EFCore,entity-framework-core,entity-framework-migrations,blazor-server-side,xaf,Entity Framework Core,Entity Framework Migrations,Blazor Server Side,Xaf,我用XAF Blazor 20.2.3向导创建了一个新项目 并将EFCore软件包升级到5.0。 下午我跑了 Install-Package Microsoft.EntityFrameworkCore.Tools 但是当我跑的时候 add-migration initial 我明白了 无法创建类型为“ExamBuddyEFCoreDbContext”的对象。有关设计时支持的不同模式,请参见 我看过这个链接,但我认为它不适用于xaf Blazor应用程序 我试着注释掉数据库初始值设定项 使用系

我用XAF Blazor 20.2.3向导创建了一个新项目 并将EFCore软件包升级到5.0。
下午我跑了

Install-Package Microsoft.EntityFrameworkCore.Tools
但是当我跑的时候

add-migration initial
我明白了

无法创建类型为“ExamBuddyEFCoreDbContext”的对象。有关设计时支持的不同模式,请参见

我看过这个链接,但我认为它不适用于xaf Blazor应用程序

我试着注释掉数据库初始值设定项

使用系统;
使用DevExpress.ExpressApp.EFCore.update;
使用Microsoft.EntityFrameworkCore;
使用DevExpress.Persistent.BaseImpl.EF.PermissionPolicy;
使用DevExpress.Persistent.BaseImpl.EF;
使用DevExpress.ExpressApp.Design;
使用DevExpress.ExpressApp.EFCore.DesignTime;
使用DevExpress.Persistent.Base;
命名空间ExamBuddy.Module.BusinessObjects{
公共类ExamBuddyContextInitializer:DbContextTypesInfoInitializerBase{
受保护的重写DbContext CreateDbContext(){
var builder=new DbContextOptionsBuilder()
.UseSqlServer(@“;”);
返回新的ExamBuddyEFCoreDbContext(builder.Options);
}
}
//[TypesInfoInitializer(typeof(ExambuddyContentilizer))]
公共类ExamBuddyEFCoreDbContext:DbContext{
public ExamBuddyEFCoreDbContext(DbContextOptions选项):基本(选项){
}
公共数据库集模块信息{get;set;}
公共DbSet模型差异{get;set;}
公共数据库集ModelDifferenceSpects{get;set;}
公共数据库集角色{get;set;}
公共DbSet RolesBase{get;set;}
公共数据库集用户{get;set;}
公共数据库集CourseUnits{get;set;}
}
[更新]

我将模块项目设置为启动项目,然后运行

add-migration initial -verbose
结果是

启动项目“ExamBuddy.Module”targets framework.NETStandard。没有与此框架关联的运行时,无法直接执行以它为目标的项目。若要将实体框架核心包管理器控制台工具用于此项目,请添加引用此pro的以.NET framework或.NET Core为目标的可执行项目,并将其设置为启动项目;或者,将此项目更新为跨目标.NET Framework或.NET Core。有关将EF Core工具用于.NET标准项目的更多信息,请参阅

[更新]

交联到

我在ExamBuddy.Blazor.Server中添加了以下内容

    public class ExamBuddyContextFactory : IDesignTimeDbContextFactory<ExamBuddyEFCoreDbContext>
    {
        public ExamBuddyEFCoreDbContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder<ExamBuddyEFCoreDbContext>();
            optionsBuilder.UseSqlServer(@"Integrated Security=SSPI;MultipleActiveResultSets=true;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=ExamBuddy;ConnectRetryCount=0;");
            return new ExamBuddyEFCoreDbContext(optionsBuilder.Options);
        }
    }
因此,我添加了ConsoleApp1作为3.1.net核心启动项目,并添加了对XAF项目的引用

PM> add-migration init
Build started...
Build succeeded.
Unable to create an object of type 'ExamBuddyEFCoreDbContext'. 
有关设计时支持的不同模式,请参见


源代码是

我按照DevExpress票证中的建议创建了ExamBuddyContextFactory类 在模块项目中,然后能够创建初始迁移

public class ExamBuddyContextFactory : IDesignTimeDbContextFactory<ExamBuddyEFCoreDbContext>
{
    public ExamBuddyEFCoreDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<ExamBuddyEFCoreDbContext>();
        optionsBuilder.UseSqlServer(@"Integrated Security=SSPI;MultipleActiveResultSets=true;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=ExamBuddy;ConnectRetryCount=0;");
        return new ExamBuddyEFCoreDbContext(optionsBuilder.Options);
    }
}
公共类ExamBuddyContextFactory:IDesignTimeDbContextFactory
{
public ExamBuddyEFCoreDbContext CreateDbContext(字符串[]args)
{
var optionsBuilder=new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(@“Integrated Security=SSPI;MultipleActiveResultSets=true;Pooling=false;数据源=(localdb)\\mssqllocaldb;初始目录=ExamBuddy;ConnectRetryCount=0;”;
返回新的ExamBuddyEFCoreDbContext(optionsBuilder.Options);
}
}

但是,我在尝试运行更新数据库时出错。指定的LocalDB实例名称无效,这是来自DevEx支持的,严重吗?使用逐字字符串时,应使用单个反斜杠,即
(LocalDB)\mssqllocaldb
,否则指定的LocalDB实例名称无效。appsettings.json具有“ConnectionString”:“Integrated Security=SSPI;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=ExamBuddy”并且工作正常。
public class ExamBuddyContextFactory : IDesignTimeDbContextFactory<ExamBuddyEFCoreDbContext>
{
    public ExamBuddyEFCoreDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<ExamBuddyEFCoreDbContext>();
        optionsBuilder.UseSqlServer(@"Integrated Security=SSPI;MultipleActiveResultSets=true;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=ExamBuddy;ConnectRetryCount=0;");
        return new ExamBuddyEFCoreDbContext(optionsBuilder.Options);
    }
}