dotnet aspnet-codegenerator失败了,消息是,已经找到了一个以上具有相同名称的dbcontext



我有一个主机类

namespace Trivia.Models
{
    public class Host
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int SettingId { get; set; }
        //public HostSetting Setting { get; set; }
    }
}

上下文

using Microsoft.EntityFrameworkCore;
namespace Trivia.Models
{
    public class TriviaDbContext : DbContext
    {
        public TriviaDbContext(DbContextOptions<TriviaDbContext> options) 
            : base(options)
        {
        }
        public DbSet<Host> Host { get; set; }
    }
}

以下行添加到Configureservices方法的类启动方法

services.AddDbContext<TriviaDbContext>(options =>
                                                   options.UseSqlite("Data Source=Trivia.db"));

运行下面的命令

dotnet aspnet -codegenerator控制器-Name hostscontroller -m主机 -dc triviadbcontext - RelativeFolderPath Controller -RusedEfaultLayout -ReferencescriptLibraries

给出以下错误

构建项目...找到生成器"控制器" ...运行 发电机"控制器" ...试图编译应用程序 记忆。试图找出实体框架元数据 模型和dbcontext:"主机": microsoft.aspnetcore.dataprotection.keymanagement.xmlkeymanager [0] 用户配置文件可用。将'/users/path/.aspnet/dataprotection-keys'作为钥匙存储库; 钥匙不会在静止时加密。多个dbcontext命名 发现了" trivia.models.triviadbcontext"。指定使用哪个 使用其确切情况提供其完全合格的名称。StackTrace:
在 Microsoft.entityFrameWorkcore.Design.Internal.dbContextOperations.findContextType(String 名称(at Microsoft.entityFrameWorkcore.Design.Internal.dbContextoperations.CreateContext(String contextType(at Microsoft.visualstudio.web.codegeneration.entityframeworkcore.entityframeworkmodelprocessor.trycreatecontecontectastingusingappcode(type dbContextType,类型startuptype(

多个dbcontext命名为'trivia.models.triviadbcontext'是 成立。通过提供完全合格的名称来指定使用哪个 使用确切的情况。在 microsoft.visualstudio.web.codegeneration.actioninvoker.b__6_0(( 在 microsoft.extensions.commandlineutils.commandlineapplication.execute(string [] Args( microsoft.visualstudio.web.codegeneration.actioninvoker.execute(string [] Args( microsoft.visualstudio.web.codegeneration.codegencommand.execute(string [] ARGS(运行时00:00:11.61

我没有多个数据库上下文。

我的program.cs文件

public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }
        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                //.UseStartup<Startup>()
                   .UseStartup(typeof(Startup).Assembly.FullName)
                .Build();
    }

uncomesting//。usestartup((使应用程序起作用。

我仍然希望应用程序使用基于我的环境的启动开发,加上dotnet aspen-codegenerator工作。

而不是使用startupdevelverment,您使用configuredevelopmentsvices并在那里设置环境,例如

public void ConfigureDevelopmentServices(IServiceCollection services) 
        {
            services.AddMvc();
            services.AddDbContext<TriviaDbContext>(options =>
                                                   options.UseSqlite(Configuration.GetConnectionString("TriviaDb")));
        }

好处

  1. 无需使用启动{enviornmentName} class
  2. 无需修改程序
  3. 与dotnet aspnet-generator一起使用

这种方法比在Configureservices方法中使用/其他条件要好得多。

为我指定上下文。在dotnetcore 3.0

dotnet ef migrations add IntialCreate  --project .Persistence -s .API  --context DataContext

最新更新